最可靠判断奇偶的方法是n % 2 != 0或n & 1:前者通用但需注意负数取余符号,后者高效且天然兼容负数,二者均仅适用于整型,浮点数不支持。

用 % 运算符判断奇偶是最直接的方式
整数对 2 取余是判断奇偶最常用也最可靠的方法:n % 2 == 0 表示偶数,n % 2 != 0 或 n % 2 == 1 表示奇数。但要注意负数:C++ 中负数取余结果符号与被除数一致,比如 -3 % 2 是 -1,不是 1,所以不能只写 n % 2 == 1 判断奇数。
- 安全写法是用
n % 2 != 0判断奇数,或用abs(n) % 2 == 1(需#include <cmath></cmath>) - 如果确定输入非负,
n % 2 == 1可用,但生产代码里建议统一用!= 0 -
%对int、long等整型有效,对浮点数会编译错误——别对double直接用%
用位运算 & 1 更快,但有类型限制
整数最低位为 1 表示奇数,所以 n & 1 结果为 1 就是奇数,为 0 就是偶数。这个操作不依赖符号,-3 & 1 也是 1,天然兼容负数。
组合式C++代码评审方案,融合静态分析、AI推理、多轮迭代评审和C++专项检查,适用于PR审查、增量代码审查、全项目评审和代码质量评分,触发词包括review cpp、cpp代码评审、C++review、代码审查。
- 仅适用于整型(
int、short、long long等),不能用于浮点或用户自定义类型 - 无符号类型(如
unsigned int)用& 1安全且高效;有符号类型在二进制补码系统下也成立(所有主流平台都是) - 编译器通常会把
n % 2优化成& 1,但显式写& 1更明确,也避免了负数取余的语义顾虑
别用 std::abs(n) % 2 做兜底
有人想“先取绝对值再模 2”来统一处理正负,但这引入了额外函数调用和潜在溢出风险:对 INT_MIN 调用 std::abs 是未定义行为(因为 INT_MAX )。
- 对
int类型,std::abs(INT_MIN)在多数实现中返回INT_MIN,后续% 2还是负数 - 不如直接用
n & 1或n % 2 != 0,既简洁又避开边界问题 - 若变量类型是
long long,对应用llabs,但同样存在LLONG_MIN问题——没必要绕路
模板函数封装时注意类型推导
如果写通用函数,比如 template<typename t> bool is_odd(T n)</typename>,要小心类型支持:
-
T必须支持%或&运算,否则编译失败;std::complex或自定义大数类就不行 - 对
char、bool等小整型,& 1依然有效,但%会隐式提升,行为一致 - 若想支持浮点,得先转整数(如
static_cast<long long>(n)</long>),但需考虑截断和范围——一般不建议,奇偶性本身是离散整数概念
n & 1,强调可读性或需要适配非整型接口时用 n % 2 != 0。别为了“看起来高级”硬套位运算,也别忽略负数和类型边界。C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!










