2010-10-20 3 views
1

Si j'imprime ~100 en Java, j'obtiens -101. J'essaie de le faire à la main. L'opérateur NOT (~) inverse tous les bits.Calculez ~ 100 à la main

100 en binaire est 00000000000000000000000001100100.

inverseuses ses bits donne:

11111111111111111111111110011011

Et maintenant? Comment puis-je obtenir -101?

+2

Qu'est-ce exactement où vous attend une opération binaire sur un nombre signé à le faire? –

+2

Comprenez-vous pourquoi '~ 0' est' -1'? – Gabe

Répondre

10

Java utilise le complément à deux (voir §4.2 Types et valeurs de primitives) Pour annuler, vous prenez le complément et vous en ajoutez un.

-x = ~x + 1 
~x = -x - 1 
~100 = -100 - 1 

Une autre façon de penser est à noter:

11111111111111111111111111111111 = -1 

puis faites:

11111111111111111111111111111111 (-1) 
- 11111111111111111111111110011011 (~x) 
=       1100100 (100) 

-1 - ~x = 100 
-1 - 100 = ~x 
~x = -101 
+0

http://en.wikipedia.org/wiki/Two%27s_complement –

0

La plupart des systèmes travaillent aujourd'hui avec le système du complément du 2. Dans ce système, les nombres positifs sont les mêmes que dans l'ancien système binaire, alors que les nombres négatifs sont différents (cette aide mappe un autre nombre négatif utilisant le même nombre de bits)

Si vous voulez prendre un nombre dans ce système et le traduire retour à l'ancienne mode binaire:

~ (NegNumber) +1

Questions connexes