Побитовое NOT.
Побитовое not заменяет каждый бит операнда на противоположенный:
// 0000 - это ноль alert(~0) // -1 // Но если заменить каждый бит на противоположенный: 1111 - 15. // Почему так? P.S. почему же тогда ~ работает как: -(х+1) ?? |
Заменяет каждый бит операнда включая знаковый
|
Deff,
эм..немного не понял |
alert(~1) // -1 |
Deff,
Вообще-то -2) Так-с, я могу сейчас глупость сказать, но знаковый бит, это самый первый? Все спасибо, приблизительно понял |
Цитата:
Цитата:
|
не то чтобы доказательство, но может прояснит немного картину:
|
Вообще побитовая инверсия равна вычитанию из -1
alert(~2) // -3 alert(~3) // -4 alert(~4) // -5 |
Не, нуприблизительлно я все-таки понял, возьмем 4 бита:
0001 = 1 ~0001 = 1110 = -2, проверим это: 1111 = -1, 1110+ 1111 ==== 1101 = -3, т.к. 0101 = 3, у нас 4 бита, 1 бит - знаковость, значит 1101 = -3 чтд: 1110 = -2 Только у меня последний вопрос, скорее из части информатики: Почему -1, это 1111, а не 1001 (если 4 бита)? |
x-yuri,
Спасибо, но я мало что понял). Что значит b, в конце каждого числа? |
Цитата:
|
Цитата:
Цитата:
Код:
0111b (7) |
а, я даже понял ответ на твой изначальный вопрос :)
Цитата:
|
Цитата:
|
Цитата:
~0 = -1 + 0, ~0000 = -1 + 0 ~0000 = -1 1111 = -1. Все теперь понял) =============== 0000 = 0 <==> 0001 = 1 <--> 1111 = -1 0010 = 2 <--> 1110 = -2 0011 = 3 <--> 1101 = -3 0100 = 4 <--> 1100 = -4 0101 = 5 <--> 1011 = -5 0110 = 6 <--> 1010 = -6 0111 = 7 <--> 1001 = -7 P.S. короче: нужно запомнить, что 1111 = -1, 1110 = -2 с числами -3, -4 есть логика (заменяем первый бит операнда) После уже просто инверитурем предыдущее число в левом ряду, например: -6 = ~5 -6 = ~0101 -6 = 1010 Цитата:
0111b (7) + 0001b (1) -------- 1000 (8) |
ну если выбрать не такой крайний случай, то получится
Код:
~0101 + 0101 = 1111 |
Цитата:
|
devote,
ну у меня 4 бит, это понятно, щас читаю, что написал x-yuri, как и сказал, задам вопросы) |
x-yuri,
чувак, супер, нет вопросов, все понял :D |
Часовой пояс GMT +3, время: 08:03. |