Язык программирования C



Побитовые логические операции - часть 2


getbits(x,p,n) /* get n bits from position p */ unsigned x, p, n; { return((x >> (p+1-n)) & \^(\^0 << n)); }

Операция x >> (p+1-n) сдвигает желаемое поле в правый конец слова. описание аргумента x как unsigned гарантирует, что при сдвиге вправо освобождающиеся биты будут заполняться нулями, а не содержимым знакового бита, независимо от того, на какой машине пропускается программа. Все биты константного выражения \^0 равны 1; сдвиг его на n позиций влево с помощью операции \^0<<n создает маску с нулями в n крайних правых битах и единицами в остальных; дополнение \^ создает маску с единицами в n крайних правых битах.

Упражнение 2-5

Переделайте getbits таким образом, чтобы биты отсчитывались слева направо.

Упражнение 2-6

Напишите программу для функции wordlength(), вычисляющей длину слова используемой машины, т.е. Число битов в переменной типа int. функция должна быть переносимой, т.е. Одна и та же исходная программа должна правильно работать на любой машине.

Упражнение 2-7

Напишите программу для функции rightrot(n,b), сдвигающей циклически целое n вправо на b битовых позиций.

Упражнение 2-8

Напишите программу для функции invert(x,p,n), которая инвертирует (т.е. заменяет 1 на 0 и наоборот) n битов x, начинающихся с позиции p, оставляя другие биты неизмененными.

on_load_lecture()

Дальше »

  Если Вы заметили ошибку - сообщите нам.  

Страницы:

« |

1

|

2

|

3

|

4

|

5

|

6

|

7

|

8

|

вопросы | »

|

для печати и PDA

Курсы | Учебные программы | Учебники | Новости | Форум | Помощь



Телефон: +7 (495) 253-9312, 253-9313, факс: +7 (495) 253-9310, email: info@intuit.ru

© 2003-2007, INTUIT.ru::Интернет-Университет Информационных Технологий - дистанционное образование




Содержание  Назад  Вперед