2012-06-10 2 views
5

Так как я был reading about ~,Почему ~ 0 - -1?

Выполняет оператор не на каждый бит.

Так что я пробовал:

0 = 00000000000000000000000000000000 

     so ~0 should be 

~0 = 11111111111111111111111111111111 

Но когда я попробовал, она возвращает -1. Разве это не 11111111111111111111111111111111 is 4294967295 в десятичном формате?

+1

Duplicate: http://stackoverflow.com/questions/3141163/why-do-unsigned-int-x-1-and-int-y-0-have-the-same-binary-representation – copy

+0

@copy - Это 'C' не JavaScript. –

+4

Это очень простая вещь, применимая к большинству языков программирования. Прочтите http://en.wikipedia.org/wiki/Two%27s_complement или http://stackoverflow.com/a/3141181/1078067 – copy

ответ

9

Он интерпретируется как целое число со знаком, а в дополнении 2 целое число со всеми битами 1 равно -1.

+0

Итак, когда вы превращаете '4294967295' в двоичный код, тогда переверните его обратно в десятичную, он станет' -1'? –

+1

Возможно, стоит добавить - в дополнение к двум, все биты имеют то же значение, что и для неподписанного значения, за исключением наиболее значимых. Этот старший бит (MSB) имеет значение, отрицательное относительно одного и того же бита в значении без знака - например, для 32-битных целых чисел MSB стоит -2147483648 для двойного дополнения, а не +2147483648 для неподписанных. – Steve314

+1

Это зависит от используемого языка и типов, @Derek. Если я правильно помню поведение Javascript, если вы введете '4294967295', оно будет рассматриваться как« число »и будет представлено внутри как« double », поэтому оно не будет автоматически повернуто на« -1 ». Но если вы выполняете на нем битовые операции, он будет преобразован в 32-битное целое (подписанное), а затем бит-шаблон интерпретируется как '-1'. –

6

Немного-образец всех 1 х является 4294967295 для целого числа без знака, или целого числа с более чем 32 битом. Для знакового целого числа с 32-битные представлены в виде двух дополнений его -1.

7

Только в том случае, если тип неподписан. Подписанные целые числа используют самый верхний бит как флаг отрицания - и, таким образом, установка его в 1 приводит к отрицательному числу. См. Two's Complement.

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