Как я могу переключить N-бит целого числа - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь переключать биты числового значения с помощью оператора дополнения ~, но это приводит к отрицательному числу.Например, я хочу переключить 5 -> 2 (101 -> 010)

Как мне изменить это число в Visual Studio ?

Ответы [ 5 ]

0 голосов
/ 31 октября 2018

Спасибо, я решил эту проблему.

По использованию number ^= 1UL << N Спасибо за ваш ответ.

0 голосов
/ 24 октября 2018

Я предпочитаю это:

number ^= 1UL << N
0 голосов
/ 24 октября 2018

В качестве 32-битного значения 5 не равно 0b101.Это 0b0000'0000'0000'0000'0000'0000'0000'0101.

(Хотя эти начальные нули не являются значимыми, по значению , факт, что вы выполняете битОперации делают "ширину" двоичного представления важной.)

Итак, когда вы переворачиваете все биты, вы получаете 0b1111'1111'1111'1111'1111'1111'1111'1010, который действительно является отрицательнымчисло для кодирования дополнения к двум.

Если вы просто хотите перевернуть три младших бита, вы можете использовать маску для этого:

const int y = x ^ 0b111;

Это оставит все остальные биты в покое.

0 голосов
/ 24 октября 2018

Здравствуйте, вы можете сделать это.

(~ N) <0?(длинный) pow (2, 32) + ~ N: ~ N; </p>

0 голосов
/ 24 октября 2018

Требуется оператор XOR ^.

Если ваш исходный номер x, то:

int y = x ^ 0b111;

Отразятся первые 3 бита (я предположил,это то, что вы имели в виду под "переключателем").

...