Saturday, January 7, 2012

Нечетные числа

Чаще всего я вижу что проверку что число четное делают так:

 if (n % 2 == 0)

Тут проблем нет. А вот с нечетным часто получается засада. Проверка

 if (n % 2 == 1)

не работает для отрицательных числел, т.к. результатом n%2 для отрицательных нечетных чисел будет -1, а не 1. Но об этом постоянно забывают.

Правильно писать (n%2 != 0).

А вообще проще и надежнее проверять последний бит (n & 1 == 1). Да и выполняется эта операция быстрее. Но тогда нужно рассказывать студентам про биты... :)

2 comments:

zhelezyaka said...

Вот и причина всплыла!
Забываем про биты - допускаем ошибки.

Deep Zoomer said...

http://blogs.msdn.com/b/ruericlippert/archive/2012/01/04/what-s-the-difference-remainder-vs-modulus.aspx