У меня есть пример проблемы с w=1, y=7, z=0, x = ~(w && y) | y; и решение x = -1, но я не могу понять, почему?
w=1
y=7
z=0
x = ~(w && y) | y;
x = -1
Вот моймыслительный процесс: (w && y) = (1 && 7) = 1 ~ 1 1 в битах - 0000 0001 ~ 1 в битах - 1111 1110
0000 0001
1111 1110
Не уверен, что делать отсюда.
Последний шаг - побитовый ИЛИ, поэтому вы получите:
1111 1110 | 0000 0111 = 1111 1111
что равно -1.
~ 1 в битах равно 1111 1110, 1111 1110 или 0000 0111 равно 1111 1111, а 1111 1111 равно -1.Наиболее значимым битом является отрицательный флаг, а отрицательные числа являются вычитающими, я думаю, вы могли бы сказать.Вот почему подписанный байт может удерживаться до -128, но только до 127.
0000 0111
1111 1111
Во-первых, вы должны использовать & вместо && для побитовых операций. Во-вторых, после того, как ~1 = 111...1110 вычислено, оно ORed с y (7), чтобы получить 1111..1111, представление 2-дополнения -1.
&
&&
~1 = 111...1110
y
1111..1111
Вы правы, что ~(w && y) дает 1111...0.Последний бит 7 равен 1, поэтому | с этим значением 7 дает 1111...1 или -1.
~(w && y)
1111...0
7
1
|
1111...1
-1