Чтобы получить доступ к первым четырем (я предполагаю, что вы имеете в виду четыре старших бита) битам tmp (т.е. чтобы получить их значения), вы используете битовые маски.Поэтому, если вы хотите узнать, установлен ли, например, второй бит, выполните следующие действия:
int second_bit = (tmp & 0x4000000) >> 30;
сейчас second_bit
равно 1
, если бит установлен и равен нулю в противном случае,Идея заключается в следующем:
Представьте, что tmp (в двоичном виде)
1101 0000 0000 0000 0000 0000 0000 0000
Теперь вы используете побитовое И (&
) со следующим значением
0100 0000 0000 0000 0000 0000 0000 0000 // which is 0x40000000 in hex
ANDing создает 1
для данного бита тогда и только тогда, когда оба операнда имеют соответствующие установленные биты (оба они 1
).Таким образом, результат будет:
0100 0000 0000 0000 0000 0000 0000 0000
Затем вы сдвинете эти 30 бит вправо, что приведет к:
0000 0000 0000 0000 0000 0000 0000 0001 \\ which is 1
Обратите внимание, что если исходное значение имело проверенный нулевой битрезультат будет нулевым.
Таким образом, вы можете проверить любой бит, вам просто нужно предоставить правильную маску.Обратите внимание, что я предположил, что int имеет ширину 32 бита, что должно быть верно в большинстве случаев.