Допустим, 5&3
, четырехбитная ширина:
0101b = 5dec
0011b = 3dec
------------
0001b = 1dec
Вы просто &
биты в одном столбце.А поскольку оператор &
возвращает 1
только тогда, когда оба аргумента равны 1
, старшие биты из 5
, отсутствующие в 3
, маскируются.
Как в вашем примереиз комментариев:
$ perl -E 'printf "%b\n", 0x76'
1110110
А теперь:
1110110 = 0x76
0000011 = 3dec
-------
0000010 = 2dec
… и просто для проверки:
$ perl -E 'say 0x76&3'
2
Схема проста, вы просто &
каждый столбец:
x
y
-
z
Где z
равно x&y
.
Ага, судя по вашим комментариям в соседнем ответе, проблема в другом месте.Числовые переменные не содержат в себе «шестнадцатеричных значений».Числовые переменные содержат битовую комбинацию, представляющую число.«Число» никогда не бывает двоичным, десятичным или шестнадцатеричным.Когда вы говорите «три», в игре нет системы счисления, три - это три, несмотря ни на что.
Когда вы говорите что-то вроде var x = 0x76
в исходном коде, машина считывает шестнадцатеричное представление числа, создает битовый шаблон, представляющий это число, и сохраняет его в памяти, соответствующей переменной.И когда вы тогда говорите что-то вроде x &= 3
, машина создает битовый шаблон, представляющий номер три, объединяет его с битовым шаблоном, сохраненным в переменной, и сохраняет результат в переменной.