2017-12-01 5 views
0

Ich kann nicht verstehen, wie der folgende Code -12 ergibt. Bitte hilf mir.Die Negation einer ganzen Zahl führt zu einem unerwarteten Ergebnis

int a=11;  
int result=~a;  
System.out.println(result);  

Ich dachte, es wird 4. aber ja ich sah eine vorangehende Null.
Ich denke, es hat etwas mit Zweierkomplement zu tun, aber kann nicht wie macht.

+0

2er-Komplement = (-x) - 1. Also würde dies geben Sie -12. Bitte lesen Sie dies: https://stackoverflow.com/questions/8305199/the-tilde-operator-in-python –

Antwort

4

11 's binäre Darstellung ist 00000000000000000000000000001011.

Die Negation dieser Nummer ist 11111111111111111111111111110100.

Das ist die Zweierkomplementdarstellung von -12.

+0

danke Eran für die schnelle Antwort, aber wie konvertiere ich 0100 zu -12 und wie ich wissen, dass ich 2's tun muss ergänzen? – pankaj

+0

@pankaj Eine negative Zahl wird in Java immer als 2 'Komplement dargestellt. Wenn Sie eine positive Zahl negieren, erhalten Sie eine negative Zahl. Der Wert von '1111111111111111111111111111110100' ist -12, da Sie 1100 (12) hinzufügen müssen, um 2^32 (1 gefolgt von 32 0s) zu erreichen. Ähnlich ist '1111111111111111111111111111111111'' -1', da Sie 1 hinzufügen müssen, um 2^32 zu erreichen. – Eran

+0

das war sehr hilfreich .... danke @Eran – pankaj

Verwandte Themen