inline int test(long int a)
{return ((a>>15)+1)&~1;}
Обьясните плииз, что за строчка на С++ написана???: ((a>>15)+1)&~1.
Код:
Мне не понятно это что такое:
Код:
((a>>15)+1)&~1;
В комменте написано, что функция "test" проверяет параметр "a" на допустимый диапазон.
Вот из маньки по ПХП скажем - http://www.pomorsu.ru/doc/php_manual/piramidin/operators.bitwise.html
(что применимо и к С++)
1010 1100 1111 1011b, то после операции ((a>>15)+1)&~1 оно преобразовалось так:
1 (>>15): 0000 0000 0000 0001 //сдвигаем вправо на 15
2 (+1): 0000 0000 0000 0010 // no comment
3 (~1): 1111 1111 1111 1110 // устанавливаем противоположные биты
4 (&): 0000 0000 0000 0010 // устанавливаем одинаковые биты
Кстате, long int в 32 bit - ной системе тоже самое, что и int(4 байта)?
Цитата:
3 (~1): 1111 1111 1111 1110 // устанавливаем противоположные биты
Унарная операция, инверсия числа.
Цитата:
4 (&): 0000 0000 0000 0010 // устанавливаем одинаковые биты
Бинарная операция логическое "И". Результат является истинным, если истинны оба аргумента(так же называется наложением маски).
Самое главное помнить(иль подсмотреть) старшинство операций!!!
Цитата:
Кстате, long int в 32 bit - ной системе тоже самое, что и int(4 байта)?
Я думаю, что на разных машинах по разному.
& - не логическое 'И', а битовое. Логическое - &&. Узнать размер типа данных (в тривиальных случаях) можно sizeof(тип). Проверте.:-)
За sizeof спасибо, напомнил.)) Раньше пользовался, но потом забыл про него после долгого перерыва.)