2016-12-12 14 views
0

Я прочитал (here) и проверить (с помощью компьютера), что -~x равно x+1 и ~-x равной x-1 поэтому я попытался записать его и посмотреть, что происходит, но я делаю что-то неправильно.Как сделать - ~ x и ~ -x работать?

Давайте x=4

0100 // 4 in binary, leading 0 for the sign 
1100 // the inverse of the addition 
0011 // ~ complement 

0011=3, который в соответствии с правилом ~-x === x-1

-~x Но я получаю то же самое:

0100 // 4 in binary 
1011 // ~ complement 
0011 // the inverse 

Где я ошибся? Неужели я глуп?

ответ

0

ОК проблема была в моем представлении отрицательных чисел. Я должен использовать операцию Two's complement, а затем возвращает правильный результат. Так -~x будет вести себя как:

0100 // 4 (we assume a 4 bit number without taking sign into account) 
1011 // complement which is 11 

А теперь с помощью дополнения до двух:

дополняют двоек из N-разрядное число определяется как дополнение относительно 2N; другими словами, это результат вычитания числа из 2N.

В этом случае N=4 и 2^N = 16 и, наконец, когда мы вычитаем 11 из 16 получает 5, который x+1. Мы показали, что -~x === x+1