+/-
нет в памяти. Есть только
0/1
. Запись отрицательных чисел, как вы показали, называется
дополнительный код. Он удобен при счете, так как практически не отличается от счета беззнаковых чисел.
Например (8 бит):
-
00000010 (2)
- 00000100 (4)
--------
11111110 (-2)
11111111 (-1)
+ 00000011 (3)
--------
100000010 (2) - здесь старший бит отбрасывается, так как у нас не больше 8 бит
Вы правы, если рассматривать
11111111111111111111111111111110
как беззнаковое число, это 4294967294. Но это знаковое число! Старший (первый) бит показывает
1
, значит, это отрицательное число.
1. Инвертируем биты:
00000000000000000000000000000001
2. Прибавляем 1:
00000000000000000000000000000010
3. Переводим в десятичную систему:
2
.
4. Добавляем
-
:
-2
.