2016-11-12 2 views
-3

Ich versuche, eine Methode zu schreiben, die mir die mindestens 2 signifikanten Binärzahlen einer beliebigen Zahl von 0 bis einschließlich 255 zurückgibt, die es in Dezimal zurückgibt, anscheinend könnte ich mod operator% verwenden, aber ich nicht wissen, was zu tun ist, weil es mir mit dieser Methode nicht die richtige 2 am wenigsten sig zurückgibt. Für 19, soll es 3 seit den letzten zwei signifikanten Rück (11) ist gleich 3 in dezimalBinärzahlen in Java Least Significant

public static int getLeastSignificant2(int num) 

{ 

    int first = num<<6 

    int finalD = first>>>6; 

    return finalD; 
} 
+1

Die Frage, und der Code ist nicht sinnvoll in seiner derzeitigen Form, ich schlage vor, Sie es neu schreiben. –

Antwort

3

sollten Sie in der Lage sein, um bitweise und die Zahl von 3 (11 binär). Dies würde alle anderen Bits außer den 2 niedrigstwertigen Bits auf Null setzen.

public static int getLeastSignificant2(int num) { 
    // return num & 3; // if you don't want to use a binary literal 
    return num & 0b11; 
} 

damit ich System.out.println(getLeastSignificant2(19)); //=> 3

, wenn Sie den Mod-Operator tun könnte dies nutzen wollen. Ich denke, dass der Compiler dies konvertiert, um bitweise und unter der Haube zu verwenden.

public static int getLeastSignificant2(int num) { 
    int modResult = num % 4; 
    return modResult < 0 ? modResult + 4 : modResult; 
} 

Edit: Modifizierte negative Zahlen zu handhaben, wie @ bemerkt dave_thompson_085

+0

Gibt es eine andere Möglichkeit, das ohne Binärliterale zu tun? Ich frage mich, wie es mit dem Mod-Operator% gemacht wird, weil sie mir gesagt haben, ich solle es als Hinweis verwenden. – CSDBALLER

+0

Vielen Dank für die Hilfe. – CSDBALLER

+2

Hinweis 'n% powerof2' ist nicht die Low-Bits für ** negative Werte ** (mindestens für Zweierkomplement-Darstellung wie Java erfordert); das ist kein Problem für dieses Q (begrenzt auf 0: 255), kann aber in anderen Fällen sein. –