2012-01-05 2 views
1

Когда я дополняю 1 (~ 1), я получаю вывод как -2. Как это делается внутри страны?Дополнение двоичных чисел

Сначала я предположил, что биты инвертированы, поэтому 0001 становится 1110, а затем добавляется к нему 1, поэтому он становится 1111, который хранится, как будет получен полученный номер?

+0

FWIW, в эффекте '-' оператор делает именно то, что вы описываете; берет два дополнения. Имея оператор '~', это также будет ... избыточным. – geoffspear

+0

спасибо .... go it – Akash

ответ

3

Ну, нет. Когда дополнение 1, вы идете просто инвертировать биты:

1 == 0b00000001 
~1 == 0b11111110 

И это -2 в виде дополнения до двух, что путь ваш компьютер внутренне представляет отрицательные числа. См http://en.wikipedia.org/wiki/Two's_complement, но вот несколько примеров:

-1 == 0b11111111 
-2 == 0b11111110 
.... 
-128== 0b10000000 
+127== 0b01111111 
.... 
+2 == 0b00000010 
+1 == 0b00000001 
0 == 0b00000000 
1

Whar вы имеете в виду "когда я дополняю 1 (~ 1),"? Существует то, что называется Ones-дополнение, и есть то, что называется Twos-Complement. Twos-Complement более распространен (он используется на большинстве компьютеров), так как он позволяет добавлять и вычитать отрицательные числа с использованием того же алгоритма, что и порядковые числа.

-комплемент Двойки создается путем принятия двоичного представления числа и положительного номер переключения каждого бита от 1 до 0 и от 0 до 1, а затем добавить один

5 0000 0101 
4 0000 0100 
3 0000 0011 
2 0000 0010 
1 0000 0001 
0 0000 0000 
-1 1111 1111 
-2 1111 1110 
-3 1111 1101 
-4 1111 1100 
-5 1111 1011 
etc. 
+0

И есть побитовое дополнение, '~' в C. –

Смежные вопросы