(bool)(i&1)和i%2 == 1相同吗?

Mih*_*yan 27 c c++ cross-platform

(bool)(i & 1)i % 2 == 1总是相同的地方iint

注意:总是说我的意思是所有平台(即使字节是16位)和所有C和C++标准.

编辑:

适用于所有C和C++标准bool.

Ste*_*sop 49

没有.

1的补码表示int,-1的表示是1 ... 10,所以它们不同.

无论如何,i % 2对于负数可能是负的i(当它不是0时,它必须在C99中),因此对于负奇数不等于1.

  • @Kiril:`<<`和`>>`对签名类型的定义非常有限 - 使用带有负LHS的`<<`是未定义的行为.使用带有负LHS的`>>`是实现定义的结果.所以,是的,它们是不安全的.C99中6.5.7/4和/ 5. (3认同)
  • @Kiril:按位运算符处理值的位表示.如果`-1&1`为1,那么C实现不使用1的补码,无论底层硬件对该主题的看法如何.它模仿2s的补码或符号幅度. (2认同)

hrn*_*rnt 9

没有.

例如,如果我是-1,请尝试它.-1 % 2 == -1,(bool) (-1 & 1)是1.

(假设2补码)