Чаще всего я вижу что проверку что число четное делают так:
if (n % 2 == 0)
Тут проблем нет. А вот с нечетным часто получается засада. Проверка
if (n % 2 == 1)
не работает для отрицательных числел, т.к. результатом n%2 для отрицательных нечетных чисел будет -1, а не 1. Но об этом постоянно забывают.
Правильно писать (n%2 != 0).
А вообще проще и надежнее проверять последний бит (n & 1 == 1). Да и выполняется эта операция быстрее. Но тогда нужно рассказывать студентам про биты... :)
2 comments:
Вот и причина всплыла!
Забываем про биты - допускаем ошибки.
http://blogs.msdn.com/b/ruericlippert/archive/2012/01/04/what-s-the-difference-remainder-vs-modulus.aspx
Post a Comment