2016-10-13 2 views
0

Я немного смущен относительно того, что делает (~a).toString(2).Что такое (~ a) .toString (2) делать?

Я знаком с бинарным и 1-м дополнением и дополнением 2s.

Итак, 5 000101 в 1-м дополнении и 2-х дополнит это число остается неизменным.

и -5 в 1s дополнению 111010 и 2s дополняют это 111011

Ни одно из этих чисел не связаны с 110 или 100

Так что я не понимаю, как бинарные результаты 110 и 100 в настоящее время полученный из числа 5 или -5.

Я также знаю, что дополнение 1s вычисляется путем перевертывания битов, и я знаю, что дополнение 2s вычисляется путем дополнения 1-го и добавления одного. Или ярлыком для хранения всех двоичных цифр вплоть до первого, который вы находите, начиная с дальнего права на крайнее левое, и переворачивая остальные. И я знаю, что для 1-го дополнения и 2-го дополнения к положительным числам вам нужен один ноль в левом углу, и больше, чем это нормально, но не нужно. И что для отрицательных чисел в 1s и 2s дополнение, вам нужно хотя бы один 1 в крайнем левом углу, и более того, это нормально, но не нужно. Но ни один из этих фактов не объясняет результат, который я вижу. (или, возможно, они это делают, но я не вижу этого)

Я читал, что тильда (~) переворачивает биты, но я не вижу, как этот результат получается.

a=5 
(~a).toString(2) 
"-110" 

и

a=-5 
-5 
(~a).toString(2) 
"100" 
+2

Это [побитовое NOT] (https: //developer.mozilla .org/ru/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators # (Bitwise_NOT)) .... и [radix 2] (https://developer.mozilla.org/en-US/docs/Web/ JavaScript/Reference/Global_Objects/Number/toString # Parameters) преобразует его в соответствующую двоичную строку –

+2

'toString (2)' преобразуется в двоичный файл, тильда ('~') является побитовым унарным оператором http://stackoverflow.com/questions/791328/how-do-the-bitwise-comple-operator-work – evolutionxbox

+0

'~ 5 == -6' и' ~ -5 == 4'. Тайна решена. –

ответ

-2

Тильда имеет лишь algorihm: - (N + 1) Так, например:

~ 0 - (0 + 1), и это равно - 1

~ 6 представляет собой - (6 + 1), и это составляет -7

ToString (2) - делает двоичное значение из числа

var a=1; a.toString(2); // 1 
var a=2; a.toString(2); // 10 
var a=3; a.toString(2); // 11 
var a=4; a.toString(2); // 100 
var a=5; a.toString(2); // 101 
var a=6; a.toString(2); // 110 
var a=7; a.toString(2); // 111 
var a=8; a.toString(2); // 1000 

Информация о тильде: https://www.joezimjs.com/javascript/great-mystery-of-the-tilde/

1

~ используется для отрицания бит в большинстве языков программирования. Теперь ваша переменная 5 и, как JavaScript переменные 64 бит она хранится в памяти как (0000000000000000000000000000000000000000000000000000000000000101)

после ~ число в памяти становится (1111111111111111111111111111111111111111111111111111111111111010)

Теперь, как это отрицательное число (последний бит 1) вычисляется с использованием дополнения 2.

Значение дополнения для двоих, равное -6.

Теперь javascript показывает нам -6 в двоичном формате, где он показывает только 6 в двоичном формате и - указывает отрицательное число i.e -110 === -6.

Вы должны проверить, как написано дополнение 2, если вы в замешательстве.

Аналогично записать в двоичном -5 первым 5 представляет собой (000000 ....... 000101)

листать биты (11111) ...... 1111010

добавления 1 его становится (11111 ..... 111011)

так это -5 (1111 ..... 111011)

и делать ~ (-5) переворачивается биты выше -5 так (0000 .. ..000100).

и, как это анолита номер (первый бит равен 0)

т.е. показано, как (100) === 4.