Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для frizzn

Новый участник


Сообщения: 31
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: txt code.txt
(1.0 Kb, 17 просмотров)

mrcnn
Смотрим:
Код: Выделить весь код
/* getbits: получает n бит, начиная с p-й позиции */
unsigned getbits(unsigned x, int p, int n)
{
return (x >> (p+1-n)) & ~(~0 << n);
}
Что это такое хотели сделать тов. Ричи и Керниган?
Цитата:
Для иллюстрации некоторых побитовых операций рассмотрим функцию getbits(x, p, n), которая формирует поле в n битов, вырезанных из x, начиная с позиции p, прижимая его к правому краю. Предполагается, что 0-й бит - крайний правый бит, а n и p- осмысленные положительные числа. Например, getbits(x,4,3) вернет в качестве результата 4, 3 и 2-й биты значения x, прижимая их к правому краю.
Понятно. Рассмотрим их пример, как он будет работать на 32-разрядном IBM-совместимом компъютере:
Красивое выражение
Код: Выделить весь код
(x >> (p+1-n)) & ~(~0 << n)
делает две вещи:
1) Сдвигает побитно переменную х на (p+1-n) бит вправо.
2) Оставляет только нужные n бит, а остальные отрезает.
Выглядит это примерно так (переменная х у нас будет равна например 357) (см. аттач, на форуме форматирование вставок кода глюкает

-------
Здесь могла быть ваша реклама


Отправлено: 15:56, 18-01-2005 | #16