2017-02-09 4 views
-1

Wenn negative Zahl von -31 bis -1 dann möchte ich es in das Format 111XXXXX darstellen. ich versuche, es zu tun mit „und“ Bit-Operatoren:Bitweise "und" Operation in den Kotlin

println("0b00011111 & 0xe0 is ${0b00011111 and 0xe0}") 
println("31 & 0xe0 is ${31 and 0xe0}") 
println("0b00011111 & 0b11100000 is ${0b00011111 and 0b11100000}") 

Aber das Ergebnis ist immer 0. Wo habe ich den Fehler machen?

+0

Sie erwähnen Ihre tatsächlichen Ergebnisse (0), aber was sind die erwarteten Ergebnisse? – mfulton26

+0

Ich erwarte, dass das Ergebnis 0b11111111 oder 255 sein wird. –

+2

Oh! Ich verstehe. Ich benutze einen falschen Operator. Die Frage könnte geschlossen werden. –

Antwort

0

Es wird 0 gedruckt, weil 00011111 and 11100000 immer 0 zurückgibt. Der Rückgabetyp and ist Int, wenn Sie also in Basis 2 mit führenden Nullen drucken möchten, müssen Sie es formatieren.

wandeln es in ein String in der Basis 2, können Sie die toString Methode auf Int mit einem Radix Parameter nennen:

val numberString = (0b00011111 and 0b11100000).toString(2); 

Dies Ihnen die Zahl im Binärformat geben wird, aber ohne führende Nullen. Sie müssen links mit Nullen auffüllen, um das gewünschte Format zu erhalten. Ich überlasse diese Aufgabe Ihnen (Hinweis: padStart);)

+0

Drucken ist nur ein Beispiel. Ich möchte Int-Nummer drucken. Warum gibt {0b00011111 und 0b11100000} immer 0 zurück? 0b00011111 ist Int-Nummer. 0b11100000 ist die Int-Nummer. Und gibt Int. –

+0

Es ist immer 0, weil es mathematisch ist. Was meinen Sie? – marstran

+0

Ein besserer Weg (imo) zu konvertieren wäre '(0b00011111 und 0x11100000) .toString (2)'. Auf diese Weise müssen Sie keine Java-Klassen verwenden – therealfarfetchd