Являются ли (bool) (i & 1) и i% 2 == 1 одинаковыми?
Всегда (bool)(i & 1)
и i % 2 == 1
, где i
есть int
?
Примечание: всегда говорю, что для всех платформ (даже если байт 16 бит) и для всех стандартов C и С++.
Edit:
Для всех стандартов C и С++, где bool
существует.
Ответы
Ответ 1
Нет.
1s 'дополнение представления int
, представление -1 является 1 ... 10
, поэтому они различаются.
Во всяком случае, i % 2
может быть отрицательным для отрицательного i
(действительно, он должен быть в C99, когда он не равен 0) и, следовательно, не равен 1 для отрицательных нечетных чисел.
Ответ 2
Нет.
Например, попробуйте, если я равно -1. -1 % 2 == -1
, а (bool) (-1 & 1)
- 1.
(Предполагая 2-дополнение)