Javascript Tilde & Two дополнение
Два метода дополнения - генерирует -(x + 1)
.
например, когда JavaScript встречает Tilde, он использует этот метод:
~5 = -(5+1) = -6.
Изобразительное - позволяет глубже.
Теперь давайте поговорим о методе Two complement.
5 = 0000 0101
Flip = 1111 1010
add one = 1111 1011
поэтому 1111 1011
- -5
.
как?
: flip:
0000 0100
добавить один:
0000 0101
И так было -5
.
Итак, как это происходит при ~5=-6
?
где этот -6
появился?
Ответы
Ответ 1
Прежде всего, вам нужно понять, что ~
- это побитовый флип-оператор, который не совпадает с оператором отрицания -
. ~
выполняет только побитовое переключение, но оператор отрицания -
выполняет побитовое переключение и добавляет один (для целых чисел).
Как вы уже объяснили, если вы хотите перейти от начального числа n
к -n
, используя два метода дополнения, вы побитовое flip/not n и добавьте 1. ~ n просто побитно, не означает что ~n=-n-1
.
Например:
5 = 0000 0101
Flipped (~5) = 1111 1010
Итак, какое число 1111 1010
представляет? Поскольку первая цифра равна 1, мы знаем ее отрицательное значение. Чтобы найти какое значение, сделайте
-(flip(1111 1010) + 1) =
-(0000 0101 + 1)
-(0000 0110) =
-6
Ответ 2
~5 = -(5 + 1) = -6
пока что так хорошо. Однако ~
не является двумя дополнениями, это оператор бинарной инверсии.
5 = 0000 0101
flip : 1111 1010
который равен -6
ясно ли это?
Ответ 3
~
является оператором побитового NOT (только инвертирует биты его операнда).
Для положительного числа n
,
~n + 1 = -n
Ответ 4
Tild (~) -
это просто flip (n). То есть ~ 5 = flip (5). В java script числа всегда имеют 64-разрядную подпись. давайте примем только 8 бит для справки,
5==> 0000 0101
~5 ==> filp(0000 0101)
~5 ==> 1111 1010 ==> -6
2 'дополнение -
Это filp (n) + 1.
5 ==> 0000 0101
2 complement of 5 ==> flip(0000 0101) + 0000 0001
2 complement of 5 ==> 1111 1010 + 000 0001
2 complement of 5 ==> 1111 1011
Ответ 5
Два метода дополнения - генерирует -(x + 1)
.
Проще говоря, два дополнения не генерируют -(x + 1)
. Одно дополнение (т.е. ~/Побитовое НЕ/переворачивание бит) делает.
Два комплимента (переверните биты, добавьте 1) - это (-0
averse) операция/кодирование, используемая для выражения отрицательного число в чистых битах (и выводить из него). Два дополнения x
будут генерировать -x
.
~5
- это не что иное, как переворачивание бит 0000 0101
в 1111 1010
.
Чтобы определить значение 1111 1010
, вернемся к 0000 0101
и добавьте 1: 0000 0110 (-6)
.