Значение x & (-x) в 2 дополнения?

100
12

Где '-' обозначает отрицательные x и '&' обозначает побитовое И.


Числа находятся в 8-битном дополнении в программе, и я не могу найти корреляцию между входами и выходами.


8  & (-8)  = 8
7 & (-7) = 1
97 & (-97) = 1

Итак, возможно ли значение в манипуляции бит?


0000 1000 & (1111 1000) = 0000 1000
0000 0111 & (1111 1001) = 0000 0001
0110 0001 & (1001 1111) = 0000 0001

В каждом из вышеприведенных случаев верхние 4-биты всегда заканчиваются 0, но я не могу найти корреляцию между входами и тем, чем заканчиваются нижние 4-бит.


Любые идеи?


ОТВЕТ: Найдите самый младший бит набора

спросил(а) 2021-01-19T19:29:59+03:00 6 месяцев, 1 неделя назад
1
Решение
63

Чтобы изложить другой ответ, два дополнения равны одному дополнению числа плюс 1. Посмотрим, как идет добавление 1 к одному дополнению к 8.


8 -> 00001000 (bin) -> 11110111 (oc) -> 11111000 (tc)

Здесь обратите внимание, как добавленный 1 перемещается через одно дополнение, пока не достигнет первого 0, перевернув этот бит и биты справа от него. А также отметим, что позиция первого 0 в одном дополнении также является позицией первого 1 в исходном двоичном выражении.

В x & (-x) биты слева от первого 1 в x будут равны 0, потому что они все еще перевернуты из одного дополнения. Тогда биты справа от первого 1 также будут равны 0, поскольку они равны 0 в x (иначе первый будет раньше).


Таким образом, выход x & (-x) будет мощностью 2, соответствующей местоположению первого 1 в x.

ответил(а) 2021-01-19T19:29:59+03:00 6 месяцев, 1 неделя назад
46

Два дополнения по определению равны одному дополнению (все биты инвертированы) плюс один.


Если вы должны были делать только число & и его одно дополнение, оно всегда давало 0000 0000.

Ключ для понимания шаблона лежит здесь: если операция + 1 изменяет другие биты или только последнюю. То есть, если число имеет 1 в конце, а также если какое-либо напоминание будет распространяться после добавления +1.

ответил(а) 2021-01-19T19:29:59+03:00 6 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема