Битовые операторы НЕ - PullRequest
       80

Битовые операторы НЕ

0 голосов
/ 23 апреля 2020

Я столкнулся с проблемой с битовой арифметикой c. Он побитовый НЕ .

, если A = 5;, то ~A = ?

Двоичный код 5 равен 101, обратное значение равно 010, а затем преобразовано десятичное значение равно 0 * 2^2 + 1 * 2^1 + 0 * 2^0 = 2

Но когда я проверяю в IDE, вывод будет следующим:

System.out.println( ~5 );

Вывод:

-6

Не знаю знаю, почему. Спасибо !!!

1 Ответ

1 голос
/ 23 апреля 2020

Если вы используете стандартный int, то после присвоения вашему A 5:

int A = 5;

Тогда ваше "A" будет не 101b, а 00000000000000000000000000000101b - все 32 бита.

После операции NEG, которая инвертирует все биты, вы получите:

A = 11111111111111111111111111111010

И это int-значение равно -6 в представлении с 2 дополнениями используется на большинстве компьютеров.

...