В яз& 19219o1420t #1099;ке предусмотрен ряд операций для работы с битами; эти операции нельзя применять к переменным типа float double
& - побитовое И (AND);
- побитовое ИЛИ (включающее OR);
-
<< -
>> -
- унарная операция).
c = n & 0177
c n
c = x | mask
mask
& && и y=2, то значение х&y равно нулю, в то время как значение x&&y равно единице (почему?).
Операции сдвига << и >> осуществляют, соответственно, сдвиг влево и вправо своего левого операнда на число битовых позиций, задаваемых правым операндом. Таким образом, х<<2 сдвигает на 4. Следует отметить, что сдвиг вправо величины без знака заполняет освобождающиеся биты на некоторых машинах, таких как PDP-11, содержанием знакового бита (арифметический сдвиг), а на других - нулем (логический сдвиг).
Унарная операция ~ дает дополнение к целому; это означает , что каждый бит со значением 1 получает значение 0 и наоборот. Эта операция обычно оказывается полезной в выражениях типа:
x & ~077
маскируются нулем. Подчеркнем, что выражение x&~077 не зависит от длины слова и поэтому предпочтительнее, чем, например, x&0177700, где предполагается, что
getbits(x,p,n) n n getbits(x,4,3)
// Получить n, начиная с p-й позиции
getbits(unsigned x, unsigned p, unsigned n)
Операция x>>(p+1-n) x unsigned n позиций влево с помощью операции ~0<<n создает маску с нулями в n n
getbits
wordlength() int
rightrot(n,b) n b
invert(x,p,n), которая инвертирует (т.е. заменяет 1 на 0 и наоборот) n битов x, начинающихся с позиции p, оставляя другие биты неизмененными.
|