Używam operacji ~
do manipulacji bitami i zastanawiam się, w jaki sposób Java oblicza liczbę ujemną?W jaki sposób Java oblicza liczby ujemne?
sprawdziłem dokumentację Java:
„jednoargumentowych operatory bitowe dopełnienie«~»odwraca wzór bitowy i może być stosowany do każdego z integralnych typów, dzięki czemu każdy«0»a«1» a każdy "1" to "0", np. bajt zawiera 8 bitów, zastosowanie tego operatora do wartości, której wzór bitowy to "00000000", zmieni jej wzór na "11111111". "
Więc jeśli int a = 60 (0011 1100)
, to int c = ~a (1100 0011)
.
Pytanie brzmi, w jaki sposób Java oblicza liczby ujemne, tak aby 1100 0011 = -61
? Jedynym sposobem 1100 0011
oblicza -61
jest
- najwyższy bit jest bitem znaku.
-2^6 + 2^1 + 2^0 = -61
.
Ale to nie ma dla mnie żadnego sensu.
You jest na właściwej ścieżce, z najwyższym bitem będącym bitem znaku. Zobacz [Uzupełnienie dwóch] (http://en.wikipedia.org/wiki/Two's_complement). – rgettman
bit będący sygnaturą jest używany dla double i float, co oznacza, że masz 0,0 i -0,0, liczby całkowite nie są wykonywane w ten sposób, a 'char' jest unsigned. –