чётное/не чётное?

From
Andrey Tarasevich (2:5020/175.2)
To
Sochenko Alexander ()
Date
2003-01-23T04:19:16Z
Area
RU.ALGORITHMS
From: "Andrey Tarasevich" <atarasevich@telocity.com>

Wed Jan 22 2003 06:54, Sochenko Alexander wrote to Vlad Salikov:

 VS>> А как математически узнать чётное число или нет, если в ЯП отсутствует
 VS>> функция возвращающая дробную часть числа?

 SA> на C/С++ делается так
 SA> bool NeChet=Chislo&1;

 SA> Проще говоря еденица в младшем разряде двоичного числа
 SA> (например 9 = 1001) однозначно указывает на нечетность

 SA> т.е. для ДВОИЧНОЙ систеы счисления (а в PC в таком представлении
 SA> хранятся числа обычно) достаточно проверить младший бит числа.

Если речь идет о С/С++, то в каком представлении хранятся числа в машине
никакой роли не играет. Спецификация битовых операций в этих языках дается на
логическом, а не на физическом уровне, и результат 'N & 1' всегда дает ответ о
четности положительного числа N, пусть подлежащая архитектура будет хоть
троичной, хоть семиричной.

С отрицательными числами ситуация сложнее. Результат зависит от применяемой
данной реализацией транслятора (не архитектурой, а именно реализацией) формы
представления отрицательных целых чисел. Для дополнительного кода и кода
signed magnitude ответ будет верным и для отрицательных чисел. А вот для
отрицательных чисел, представленных в обратном коде, этот способ будет давать
ответ "с точностью до наоборот".

Best regards,
Андрей.

--- ifmail v.2.15dev5
 * Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2)