Добавил:
Rumpelstilzchen2018@yandex.ru Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3-й семестр / Практические работы / 2 - Битовые операции.docx
Скачиваний:
45
Добавлен:
25.12.2020
Размер:
23.32 Кб
Скачать
  1. Операции надбитами

x<<n

Сдвиг влеводвоичного

кода (умножение на2n)

int x=7; x=x<<2; // x=111<<2=100

x>>n

Сдвиг вправо двоичного кода

(деление на 2n

x>>1; 100>>1=010

x & maska

Поразрядное И (запись в бит 0)

111 & 100 =100

short maska=0x1F; short int x=0xFFFFFFFF;

x & maska (0x0000001F)

X |maska

Поразрядное ИЛИ (запись в бит 1)

111 | 100 =111

short maska=0x1F; short int x=0xFFFFFF00;

x & maska (0xFFFFFF1F)

X ^maska

Исключающее ИЛИ для

поразрядных операций

.unsigned int x=0xF, a=1;

A=x^a; 1111 ^ 0001=1110

~

инверсия

x=0x0F; ~x (F0)

Пример. Инвертирование маски перед умножением. Установить пятый бит в 0

int_tmain(intargc, _TCHAR* argv[])

{

unsigned charx=255;

unsigned charmaska=0x01; //1=00000001

x=x&(~ (maska<<4));

cout<<(int)x; //результат239cin.get();

return0;

}

  1. Задания

    1. Напишите выражение, которое решаетзадачу

- Установить 7 бит в 1.

  • Установить 5 и 3 биты в0.

  • Инвертировать 5 бит переменнойх.

3 Памелу Зейв

  • Вывести все биты значения переменной Х. Размер переменной неизвестен.

    1. Какую задачу реализует код функции?voidcoutp(unsigned intx)

{

intn=sizeof(int)*8;unsignedmaska=(1<<n-1);

for(inti=1; i<=n;i++)

{

cout<<((x&maska)>>(n-i)); maska=maska>>1;

}}

    1. Определите задачи, которые решают функции: set, clr, test #define BITSPERWORD32

#define SHIFT 5

#define maska 0x1F #define N 10000000

int a[1+N/ BITSPERWORD];

void set(int i){ a[i>> SHIFT] |=(1<<(I & MASK));} void clr (int i){ a[i>> SHIFT] &=(1<<(I & MASK));}

int test (int i) { return a[i>> SHIFT] &(1<<(I & MASK));}

  1. Реализацияалгоритма

Соседние файлы в папке Практические работы