Сдвиг и убедившись, что последние две цифры 10 в C - PullRequest
0 голосов
/ 21 февраля 2020

Как мне сдвинуть бит, чтобы мне нужно было сравнить только первые две цифры числа? Скажем, я хочу сравнить 10101011010 последние два бита и убедиться, что это 10.

Как бы я это сделал?

1 Ответ

0 голосов
/ 21 февраля 2020

Если вы хотите проверить, установлены ли определенные биты в целом числе, вы должны использовать двоичный оператор and (&) и маску. В маске вы устанавливаете биты, которые хотите проверить, а затем используете эту маску для разделения битов, которые вы хотите проверить.

Итак, в вашем примере:

val = b10101011010

И вы хотите убедиться, что последние 2 бита 10:

y = b10 = 0x02 = 2

, чем вы делаете маску, поэтому она выбирает последние 2 бита:

mask = b00000000011 = 0x03 = 3 (я бы использовал шестнадцатеричное обозначение, чтобы сделать его более понятным)

или вы можете использовать битовое смещение:

mask = (0x01 << 0) | (0x01 << 1) (установка бита 0 и бита 1 и or ing они вместе)

Теперь мы используем бинарный оператор and:

val  = b10101011010
mask = b00000000011
& -----------------
res  = b00000000010

-> теперь у нас есть интересующие нас биты

и мы сравниваем res со значением, которое вы хотите, чтобы они были:

if (res == y)
// -> good
else
// -> bad
...