Являются ли (bool) (i & 1) и i% 2 == 1 одинаковыми? - PullRequest
27 голосов
/ 22 июня 2011

(bool)(i & 1) и i % 2 == 1 всегда одинаковы, где i равно int?

Примечание: говоря всегда, я имею в виду все платформы (даже если байт 16-битный) и все стандарты C и C ++.

Edit:

Для всех стандартов C и C ++, где существует bool.

Ответы [ 2 ]

49 голосов
/ 22 июня 2011

Нет.

1с дополняет представление int, представление -1 равно 1 ... 10, поэтому они отличаются.

В любом случае, i % 2 может быть отрицательным для отрицательногоi (действительно, он должен быть в C99, когда он не равен 0) и, следовательно, не равен 1 для отрицательных нечетных чисел.

9 голосов
/ 22 июня 2011

Нет.

Например, попробуйте, если я равен -1. -1 % 2 == -1, а (bool) (-1 & 1) равно 1.

(при условии 2-х дополнений)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...