0

0

c++怎么判断一个数是奇数还是偶数_c++位运算判断【基础】

穿越時空

穿越時空

发布时间:2026-03-17 15:31:16

|

556人浏览过

|

来源于php中文网

原创

最可靠的是位运算 n & 1:对正、负、零均有效,不依赖符号规则,且避免 abs(INT_MIN) 溢出;非负整数用 n % 2 == 0 更易读;负数场景慎用 %,优先选 & 1。

c++怎么判断一个数是奇数还是偶数_c++位运算判断【基础】

% 运算符判断最直接,但要注意负数

绝大多数人第一反应是 n % 2 == 0:余数为 0 就是偶数。这在非负整数下完全可靠,但 C++ 中负数取模结果依赖于实现(C++98/03),C++11 起才规定 a % b 符号与被除数一致。也就是说:-5 % 2-1,不是 1,所以 -5 % 2 == 0 为假,判断正确;但靠这个逻辑“推导奇偶”容易误以为它总是返回 01

实操建议:

  • 如果确定输入是非负整数(如数组索引、循环变量),n % 2 == 0 安全、易读、无性能问题
  • 若可能为负(比如用户输入、计算结果),别只看 == 0,改用 abs(n) % 2 == 0 或更稳妥的位运算方案
  • 编译器对 % 2 常会自动优化成位操作,不必手动替换成 &——可读性优先

& 1 位运算是最底层可靠的奇偶判断

整数在内存中以二进制补码存储,最低位为 1 表示奇数,为 0 表示偶数。n & 1 直接提取这一位:结果是 1(真)即奇数,0(假)即偶数。它不依赖符号规则,对正、负、零全部统一有效。

常见错误现象:

立即学习C++免费学习笔记(深入)”;

  • 写成 n & 0x1 没问题,但没必要——1 就是 0x1,多敲字符还降低可读性
  • 误用 |^:比如 n | 1 永远非零,n ^ 1 是翻转最低位,不是判断
  • 对浮点数或指针用 & 1:编译报错,位运算是整型专属

示例:int x = -3; if (x & 1) { /* 进入,-3 是奇数 */ }

模板函数封装时,得小心类型和 constexpr

想写个通用函数?比如 is_even<t>(n)</t>,不能直接对所有 T& 1——boolchar 没问题,但 unsigned long long 也没问题;真正要拦的是浮点类型和自定义类。

实操建议:

  • std::is_integral_v<t></t> 在编译期做 SFINAE 或 static_assert 检查
  • 想支持 constexpr(比如用于数组维度),必须用 & 1,因为 % 在某些旧标准或复杂表达式里可能无法 constexpr 求值
  • 别为性能强行泛化:对 int 写死 n & 1 比模板调用更快,也更清晰

性能差异几乎可以忽略,但嵌入式或热循环里位运算略稳

在现代 x86/ARM 上,% 2& 1 都会被编译器优化成单条指令(如 test eax, 1),实际运行时没有差别。但某些 DSP 或老款 MCU 编译器可能不优化 %,导致调用除法库函数——这时 & 1 就是硬性要求。

使用场景提示:

  • 普通应用层代码:选 % 2 == 0,语义明确,维护者一眼看懂
  • 内核驱动、传感器采样循环、裸机固件:优先用 & 1,避开任何潜在除法开销
  • 如果用了 std::abs(n) % 2 处理负数,注意 abs(INT_MIN) 在二进制补码下溢出(未定义行为),这时候 & 1 仍是唯一安全解

最常被忽略的一点:奇偶判断本身很简单,但“数从哪来”往往带坑——比如从字符串解析的 int 可能溢出,或从网络收到的字节序未转换。别只盯着 &%,先确保那个 n 是你真想判断的那个数。

相关文章

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1570

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

241

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

170

2025.10.17

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

847

2023.08.22

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

761

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1570

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

651

2023.11.24

抖漫入口地址合集
抖漫入口地址合集

本专题整合了抖漫入口地址相关合集,阅读专题下面的文章了解更多详细地址。

0

2026.03.17

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 11.5万人学习

C 教程
C 教程

共75课时 | 5.5万人学习

C++教程
C++教程

共115课时 | 22.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号