Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177

    [java]contatore con gli operatori di manipolazione dei bit

    ciao devo realizzare realizzare un programma che mi sta dando qualche problema..devo scrivere un programma che determini il numero di bit uguali ad 1,presenti in un valore int,fornito come argomento,con gli operatori di manipolazione dei bit(es:&,|,^,<<,>>,>>>)
    es programma:
    input:011
    output:2

    Inoltre non posso utilizzare i metodi gia presenti nelle librerie java(es:Integer.bitCount());

    Il mio codice è:
    codice:
    class Operatori{
    int n;
    Operatori(int nu){
    this.n=nu;
    }
    public int numuno(){
    int count=0;
     while((n&1)==(1)){
     count++;
     n=n<<1;
     }
     return count;
    }
    
     
    public static void main(String[] args){
    Operatori o=new Operatori(0111);
    System.out.println(o.numuno());
    }
    }
    Il mio programma valuta solo il primo numero,infatti stampa 1;come posso far si che il ciclo while valuti anche le altre cifre con l'operatore <<?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da el92 Visualizza il messaggio
    Il mio programma valuta solo il primo numero,infatti stampa 1;come posso far si che il ciclo while valuti anche le altre cifre con l'operatore <<?
    Alcune questioni:
    - con n&1 stai testando il bit 0 (meno significativo). Quindi a rigor di logica dovresti shiftare a destra .... non a sinistra.
    - al primo bit con valore 0 esci dal ciclo, non ha senso. O fai sempre 32 cicli (tutti i bit) o puoi fare la logica un po' più furba ovvero esci dal ciclo solo quando l'intero valore è 0 (ovvero non potrai avere altri bit a 1).
    - 0111 non è binario (se così pensavi) .... è ottale!
    - non dovresti "sporcare" la variabile di istanza n per fare il calcolo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177
    ciao grazie per la risposta...alla fine ho risolto riscrivendo il metodo numuno() cosi:

    codice:
    public int numuno(){
    int count=0;
            String h=Integer.toBinaryString(n);
            for(int pos=0;pos<h.length();pos++){
            
            if((n&1)==1){
                count++;
            }
            n=n>>1;
        }
        return count;
    }
    Una cosa ...oltre al metodo toBinaryString della classe integer...non c'è un altro modo per convertire un int in binario?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da el92 Visualizza il messaggio
    oltre al metodo toBinaryString della classe integer
    Scusa ma ti è stato chiesto di "non utilizzare i metodi gia presenti nelle librerie" e tu vai a usare toBinaryString??

    Hai letto bene il 2° punto che dicevo prima?? Perché a me sembra banale .... quale è la difficoltà? Io non tirerei certo in ballo toBinaryString!

    Quote Originariamente inviata da el92 Visualizza il messaggio
    non c'è un altro modo per convertire un int in binario?
    Di Integer si può usare toBinaryString(int i) oppure toString(int i, int radix) (chiaramente con radix 2). La differenza tra i due è il trattamento dei numeri negativi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.