Побитовая арифметика и операторы - PullRequest
0 голосов
/ 03 марта 2012

В настоящее время изучаю побитовую арифметику. Это действительно легко, потому что у меня есть некоторый опыт работы с CS. Но я просто не понимаю ни одного момента с этим оператором.

Например:

variable3 = variableOne & 3;

или

variable3 &= 3;

На самом деле это не имеет значения.

Я не понимаю, как происходит процесс установки битов в 0. А как можно это обработать на бумаге?

1 Ответ

2 голосов
/ 03 марта 2012

Допустим, 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, машина создает битовый шаблон, представляющий номер три, объединяет его с битовым шаблоном, сохраненным в переменной, и сохраняет результат в переменной.

...