Побитовое дополнение - PullRequest
2 голосов
/ 09 мая 2011

У меня есть пример проблемы с w=1, y=7, z=0, x = ~(w && y) | y; и решение x = -1, но я не могу понять, почему?

Вот моймыслительный процесс:
(w && y) = (1 && 7) = 1
~ 1
1 в битах - 0000 0001
~ 1 в битах - 1111 1110

Не уверен, что делать отсюда.

Ответы [ 4 ]

6 голосов
/ 09 мая 2011

Последний шаг - побитовый ИЛИ, поэтому вы получите:

1111 1110 | 0000 0111 = 1111 1111

что равно -1.

1 голос
/ 09 мая 2011

~ 1 в битах равно 1111 1110, 1111 1110 или 0000 0111 равно 1111 1111, а 1111 1111 равно -1.Наиболее значимым битом является отрицательный флаг, а отрицательные числа являются вычитающими, я думаю, вы могли бы сказать.Вот почему подписанный байт может удерживаться до -128, но только до 127.

0 голосов
/ 09 мая 2011

Во-первых, вы должны использовать & вместо && для побитовых операций. Во-вторых, после того, как ~1 = 111...1110 вычислено, оно ORed с y (7), чтобы получить 1111..1111, представление 2-дополнения -1.

0 голосов
/ 09 мая 2011

Вы правы, что ~(w && y) дает 1111...0.Последний бит 7 равен 1, поэтому | с этим значением 7 дает 1111...1 или -1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...