【发布时间】:2017-12-26 14:59:21
【问题描述】:
我有一个int m 和一个unsigned int j,想确定它们是偶数还是奇数。
过去我一直在使用
if((int(j)+m)%2)
捕捉只有一个是奇数的情况。但我担心int 的转换错误地改变了j 的奇偶性。
这些都会遇到问题吗?
if(!(j%2)!=!(m%2))
if(bool(j%2)!=bool(j%2))
我知道
if(j%2!=m%2)
不起作用,因为当m 为负数时,'m%2' 将产生-1,无论j%2 的值是什么,它总是会计算为true。
【问题讨论】:
-
如果您没有大量输入,为什么不使用 abs()?
-
@IgnacioVazquez-Abrams 因为 && 没有正确的行为。我实际上是在尝试创建一个逻辑 XOR,这正是
!=所做的。 -
仅供参考,“奇偶”的正式术语是“parity”(不要与 parity bits 混淆)。
-
@jwodder:不幸的是,该维基百科文章有两个相互冲突的奇偶性定义。如果数字是奇数,则 1 的补码负数的 LSB 将为 0,而不是 1。
-
@jwodder 这就是为什么我没有说平价。