用 % 运算符判断偶数最直接:整数对 2 取余为 0 即偶数;需避免用 n % 2 == 1 判奇数,因负奇数结果为 -1;仅适用于整型,浮点数会编译报错;负数取余符号随被除数但不影响偶数判断;性能优,无需手动位运算;if 中直接写 n % 2 == 0 最清晰。

用 % 运算符判断偶数最直接
整数对 2 取余为 0 就是偶数,这是最基础也最可靠的判断方式。别想复杂,% 是 C++ 原生支持的取余运算符,所有整型(int、long、short 等)都适用。
常见错误现象:n % 2 == 1 判奇数,但负奇数(如 -3)结果是 -1,导致误判;所以永远用 n % 2 == 0 判断偶数,而不是靠“等于 1”反推。
- 只对整型变量用
%,浮点数(float、double)会编译报错:invalid operands to binary % - 如果变量可能为负,
%在 C++ 中结果符号跟随被除数(如-4 % 3 == -1),但-4 % 2仍是0,不影响偶数判断 - 性能上毫无负担,编译器通常优化成位操作(比如
n & 1 == 0),不用手动替换成位运算
if 里写 n % 2 == 0 就够了
不需要封装函数、不需查表、不需调库——入门阶段直接在逻辑分支里写表达式最清晰。C++ 的 if 语句天然支持这种布尔表达式,可读性高,调试也方便。
使用场景:用户输入校验、循环中跳过奇数索引、数组下标过滤等。
立即学习“C++免费学习笔记(深入)”;
- 示例:
int x = 8; if (x % 2 == 0) { std::cout << "偶数"; } - 别写成
if (x / 2 * 2 == x),整数除法截断可能导致误判(比如x = -1时成立但不是偶数) - 别依赖
std::abs(x) % 2 == 0,多此一举;负偶数(如-6)本身% 2就是0
用 & 位运算替代 % 要小心符号和类型
理论上 n & 1 == 0 能更快判断偶数,因为只看最低位。但它依赖补码表示,且对有符号整数行为隐含风险。
容易踩的坑:当 n 是 char 或 short 类型时,参与位运算前会整型提升(promoted),若原值为负且高位补 1,n & 1 仍正确;但若误用无符号类型混用(比如把 unsigned int 和 int 混算),逻辑可能意外成立。
- 仅当明确变量是无符号整型或你清楚其补码行为时,才考虑
n & 1 == 0 - 不要对
bool、enum class或自定义类型直接用&,编译可能不通过 - 现代编译器(GCC/Clang/MSVC)在
O2以上基本自动把n % 2 == 0优化成位操作,手动换没收益
读入字符串再转整数时,先检查是否数字再判断偶数
用户从 std::cin 或文件读的是字符串,不能直接 %。得先转成整数,否则会触发未定义行为或静默失败。
典型错误:用 std::stoi 但没捕获异常,遇到非数字输入(如 "abc")程序崩溃;或用 atoi 返回 0,把字符串 "0" 和非法输入都当成偶数。
- 安全做法:用
std::from_chars(C++17)或std::stoi加try/catch,确认转换成功后再做% 2 - 示例片段:
std::string s = "124"; try { int n = std::stoi(s); if (n % 2 == 0) { /* ... */ } } catch (const std::exception&) { // 不是有效整数 } - 别用
s.back() == '0' || s.back() == '2' || ...判断——忽略负号、空格、前导零,还无法处理大数(超出int范围)
真正容易被忽略的是输入来源的不确定性:你以为是整数,它可能是空格开头的字符串、科学计数法、甚至中文数字。判断偶数的前提,永远是先确保你手里是个合法整数。










