Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
задание_лабы_иус_cpp_2сем.doc
Скачиваний:
15
Добавлен:
16.04.2015
Размер:
252.42 Кб
Скачать

Int pow2plus1(int X)

{

return (1 << x) + 1;

}

-------------------------------

pow2plus4 - возвращает 2^x + 4, где 0 <= x <= 15 (или 31)

int pow2plus4(int x)

{

int result = 1 << x;

result+=4;

return result;

}

-------------------------------

conditional - выполняет то же, что и операция x ? y : z

int conditional(int x, int y, int z)

{

int r1=!!x, r2;

r1=(r1<<15)>>15;

r2=~r1;

return (y&r1)|(z&r2);

}

********************************************************

№ 1

int bitAnd(int x, int y);

bitAnd – возвращает x&y

Пример: bitAnd(6, 5) = 4

Допустимые операции: ~ |

Подсказка: использовать закон Де Моргана

№ 2

int nthBit(int x, int n);

nthBit – возвращает значение n-го бита x; нумерация бит начинается с 0

Нумерация бит начинается с 0

Пример: nthBit(4, 0) = 0, nthBit(4, 2) = 1

3

int SetFirstNBits(int n);

SetFirstNBits - возвращает максимальное число, задаваемое n битами

Пример: SetFirstNBits(3) = 7, SetFirstNBits(0) = 0

№ 4

int FromNtoMBits(int x, int n, int m);

fromNtoMBits - возвращает число, составленное из бит от n до m;

Нумерация бит начинается с 0

Пример: FromNtoMBits(4, 2, 4) = 1, FromNtoMBits(12, 2, 4) = 3

№5

int bitXor(int x, int y);

bitXor возвращает x^y (исключающее или)

Пример: bitXor(4, 5) = 1

Допустимые операции: ~ & |

№ 6

int MoveLeftWithAdd (int x, int y, int n);

ChangeGroupBits(int x, int y, int n1, int n2) –возвращает х, содержимое которого сдвинуто влево на n разрядов, а освободившиеся разряды заполнены старшими разрядами y.

MoveLeftWithAdd(0x1234,0x5678,8) = 3456

№ 7

int getByte(long x, int n);

getByte - возвращает n-ый байт из x

Байты нумеруются on 0 до 3

Пример: getByte(0x12345678,1) = 0x56

№ 8

int logicalShift(int x, int n) ;

logicalShift - возвращает x, сдвинутое вправо на n разрядов

Пример: logicalShift(0x87654321,4) = 0x08765432

№ 9

int MoveRightWithAdd (int x, int y, int n);

ChangeGroupBits(int x, int y, int n1, int n2) –возвращает х, содержимое которого сдвинуто вправо на n разрядов, а освободившиеся разряды заполнены старшими разрядами y.

MoveRightWithAdd(0x1234,0xABCD,8) = AB12

№10

int MoveRightWithAdd (int x, int y, int n);

ChangeGroupBits(int x, int y, int n1, int n2) –возвращает х, содержимое которого сдвинуто вправо на n разрядов, а освободившиеся разряды заполнены инвертированными младшими разрядами y.

MoveRightWithAdd(0x1234,0xABCD,8) = 3212

№11

int MoveLeftWithAdd (int x, int y, int n);

ChangeGroupBits(int x, int y, int n1, int n2) –возвращает х, содержимое которого сдвинуто влево на n разрядов, а освободившиеся разряды заполнены инвертированными старшими разрядами y.

MoveLeftWithAdd(0x1234,0x5678,8) = 34A9

12

int MoveRight(int x, int n);

int MoveRight –сдвигает х вправо на n разрядов с заполнением 1 освободившихся разрядов

Пример: MoveRight(0x123,4) = 0xF012

№13

int RetGroupBits(int x, int n1, int n2);

RetGroupBits – возвращает значение, представленное заданной группой бит

Разряды нумеруются с 0

Пример: RetGroupBits(0xF75A, 2, 6) = 0x16

№ 14

int WriteGroupBits(int x, int n1, int n2, int y);

int WriteGroupBits – возвращает значение, полученное записью у в заданную группу разрядов x.

Разряды нумеруются с 0

Пример: WriteGroupBits(0xFFFF,4,7,0x6) = 0xFF6F

15

int MoveRight(int x, int n, int onebit);

MoveRight - сдвигает х вправо на n разрядов с заполнением значением onebit (только 0 или 1) освободившихся разрядов

Примеры: MoveRight(0x123,4,1) = 0xF012

MoveRight(0x123,4,0) = 0x12

№ 16

int EraseGroupBits(int x, int n1, int n2);

EraseGroupBits – возвращает x с обнуленной группой разрядов с n1 по n2

Разряды нумеруются с 0

Пример: EraseGroupBits(0xFFFF,4,7) = 0xFF0F

№ 17

Write1toGroupBits(int x, int n1, int n2);

Write1toGroupBits –заполняет группу разрядов с n1 по n2 единицами

Разряды нумеруются с 0

Пример: Write1ToGroupBits(0x1111,4,7) = 0x11F1

№ 18

MovtLeft(int x, int n, int bit);

MoveLeft - сдвигает х влево на n разрядов с заполнением значением onebit (только 0 или 1) освободившихся разрядов

Примеры: MoveLeft(0x123,4,1) = 0x123F

MoveLeft(0x123,4,0) = 0x1230

№ 19

ChangeBits(int x, int y);

Есди в четных разрядах у стоит 1. то соответствующие разряда х инвертируются.

Разряды нумеруются с 0

Пример: ChangeBits(0xFFFF,0xF541) = 0xAABE

№ 20