Что значит >> и 0xfffffff8? - PullRequest
       3

Что значит >> и 0xfffffff8?

6 голосов
/ 11 октября 2011

Мне сказали, что (i >> 3) is faster than (i/8), но я не могу найти информацию о том, что такое >>.Может кто-нибудь указать мне ссылку, которая объясняет это?

Тот же человек сказал мне: "int k = i/8, за которым следует k*8, лучше выполнить (i&0xfffffff8);", но опять же Google не помог м ...

Спасибо за любые ссылки!

Ответы [ 11 ]

0 голосов
/ 11 октября 2011

>> - это операция правого сдвига .

Если у вас число 8, представленное в двоичном виде как 00001000, смещение битов вправо на 3 позиции даст вам 00000001, что является десятичным 1. Это эквивалентно делению на 2 три раза.

Деление и умножение на одно и то же число означает, что вы устанавливаете некоторые биты с точностью до нуля. То же самое можно сделать, если вы примените маску. Скажем, 0xF8 - это бит 11111000, и если вы И это число, то последние три бита будут установлены в ноль, а остальные биты останутся такими, как есть. Например, 10 & 0xF8 будет 00001010 и 11111000, что равно 00001000, или 8 в десятичном виде.

Конечно, если вы используете 32-битные переменные, у вас должна быть маска, соответствующая этому размеру, поэтому в ней будут установлены все биты, равные 1, за исключением трех бит справа, что даст вам ваш номер - 0xFFffFFf8.

...