You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

为什么无法通过判断负数除以2的余数是否等于1来判定其为奇数?

为什么无法通过判断负数除以2的余数是否等于1来判定其为奇数?

嗨,这个问题其实是C语言里取模运算的规则在搞鬼,咱们一步步理清楚:

首先看你第一段代码的情况:

当我判断余数是否等于1时,结果和预期不符:

int t = (-3 % 2) == 1; 
printf("is odd: %d\n", t); 

输出结果是:0

这里的核心问题是:C语言里取模运算的结果符号和被除数是一致的!也就是说-3 % 2的结果不是你以为的1,而是*-1*——因为被除数是负数,余数也会跟着是负数。拿-1和1做相等判断,结果自然是0(假)。

再看你第二种正确的写法:

当我判断余数是否不等于0时:

int t = (-3 % 2) != 0;

这时候就正常工作了。

这是因为不管是正数还是负数的奇数,除以2的余数都不可能是0(正数奇数余数是1,负数奇数余数是-1),所以用!= 0来判断奇数是通用逻辑,不管正负都能准确生效。

总结一下:如果要判断一个数是不是奇数,别直接和1比较,因为负数的余数会是-1;用“余数不等于0”的方式才是适配所有整数的靠谱做法。

备注:内容来源于stack exchange,提问作者Akramat

火山引擎 最新活动