最稳妥的奇偶判断方式是用 n % 2 == 0 判断偶数,否则为奇数;负数下位运算 n & 1 不可移植,仅当 n >= 0 时安全;% 不适用于浮点数,需先转整型;输入未校验时易误判,应先确保转换成功。

用 % 判断奇偶是最直接的方式
在 C++ 中,对整数 n 执行 n % 2,结果为 0 就是偶数,1 或 -1 就是奇数。但注意:负数取模结果依赖编译器实现(C++98/03),C++11 起规定 a % b 符号与被除数 a 一致,所以 -5 % 2 是 -1,不是 1。
实际判断时别直接写 if (n % 2 == 1),它会漏掉负奇数。稳妥写法是:
if (n % 2 == 0) {
// 偶数
} else {
// 奇数(涵盖正、负、非零)
}用位运算 & 更快,但只适用于无符号或非负整数
n & 1 是检查最低位是否为 1,效率比取模高,且不涉及除法逻辑。但它对负数的行为取决于底层补码表示和编译器解释——虽然大多数平台下 -3 & 1 得 1,但标准未保证负数的位运算结果可移植。
- 如果确定
n >= 0,if (n & 1)安全又高效 - 若
n可能为负,优先用%并按上一条方式判断 -
unsigned int类型下& 1总是可靠
小心浮点数、字符、枚举等类型误用 %
% 是整型运算符,不能直接用于 float 或 double,否则编译报错:invalid operands to binary %。想判断浮点数“整数部分”奇偶,得先转整型(注意截断方向):
立即学习“C++免费学习笔记(深入)”;
int i = static_cast(x); // 向零截断,-3.9 → -3 if (i % 2 != 0) { /* 奇数 */ }
其他类型如 char、enum 通常可隐式转为 int,但显式转换更清晰;bool 转成 int 后只有 0 或 1,true % 2 永远是 1。
输入值未校验时,% 2 可能掩盖逻辑错误
比如用户输入字符串转整数失败,std::stoi 遇非法字符抛异常,而 atoi 返回 0 —— 这时 0 % 2 == 0 会误判为偶数。真正健壮的代码要先确认转换成功:
- 用
std::from_chars(C++17)获取解析状态 - 或用
std::istringstream+fail()检查 - 别让
%成为最后一道防线
奇偶判断本身很简单,但它的上游数据来源和下游使用场景,才是真正容易出问题的地方。











