Читайте также: |
|
При написании функций можно использовать только следующее:
- целочисленные константы;
- целочисленные аргументы функций и автоматические (локальные)переменные;
- операции ~! * + -(тип) sizeof << >>& ^ |. Группы операций расположены в порядке убывания приоритета.
Запрещается:
- использовать такие операторы как if, do, while, for, switch и т.п.;
- использовать макросы или какие либо функции;
- использовать другие операции такие как &&, ||,?:;
- использовать типы данных кроме целочисленных;
- использовать массивы, структуры и объединения.
Примеры, иллюстрирующие стиль написания функций:
pow2plus1 - возвращает 2^x + 1, где 0 <= x <= 15 (или 31)
Unsigned pow2plus1(unsigned x)
{
return (1 << x) + 1;
}
-------------------------------
pow2plus4 - возвращает 2^x + 4, где 0 <= x <= 15 (или 31)
Unsigned pow2plus4(unsigned x)
{
unsigned result = 1 << x;
result+=4;
Return result;
}
-------------------------------
conditional - выполняет то же, что и операция x? y: z
Int conditional(int x, int y, int z)
{
int size=sizeof(int);
int r1=!!x, r2;
r1=(r1<<(size-1))>>(size-1);
r2=~r1;
return (y&r1)|(z&r2);
}
***********************************************************************
Примеры результатов приведены для 16-го представления целых
***********************************************************************
№ 1
Unsigned bitAnd(unsigned x, unsigned y);
bitAnd – возвращает x&y
Пример: bitAnd(6, 5) = 4
Допустимые операции: ~ |
Подсказка: использовать закон Де Моргана
№ 2
Int nthBit(i unsigned x, int n);
nthBit – возвращает значение n-го бита x; нумерация бит начинается с 0
Пример: nthBit(4, 0) = 0, nthBit(4, 2) = 1
№ 3
Дата добавления: 2015-07-11; просмотров: 140 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Определить количество отрицательных элементов в заданной строке | | | Unsigned EraseGroupBits(unsigned x, int n1, int n2); |