首页/新闻资讯/正文详情

C语言——位操作符

发布时间:2026/11/4 2:33:15 来源:云帆数科 栏目:资讯中心
C语言——位操作符
一、 位操作符操作符名称形式计算规则按位与a b对应二进制位有 0 就是 0同时为 1 才是 1|按位或a | b对应二进制位有 1 就是 1同时为 0 才是 0^按位异或a ^ b对应二进制位相同为 0相异为 1~按位取反~a所有二进制位逐个取反0 变 11 变 0左移操作符a b将 a 的二进制补码向左移动 b 位低位补 0右移操作符a b将 a 的二进制补码向右移动 b 位若 a 为正整数或无符号整数高位补 0若 a 0空出的高位补符号位二、位操作符的使用按位与eg:intmain(){intnum1-5;intnum27;intn1num1num2;printf(n1%d\n,n1);return0;}代码解释补充正数和无符号整数的原码、反码和补码相同负数的反码是将原码除符号位外的所有位取反补码是反码加 1。num1由于 num1 是负数所以它的原码、反码、补码都不相同原码: 1 0000000 00000000 00000000 00000101 反码: 1 1111111 11111111 11111111 11111010 补码: 1 1111111 11111111 11111111 11111011num2num2 是正数原码 反码 补码原、反、补码: 0 0000000 00000000 00000000 00000111与运算规则为对应二进制位有 0 就是 0同时为 1 才是 1。num1 与 num2 的补码进行与运算结果为0 0000000 00000000 00000000 00000011符号位为 0此结果为正数原码 补码 00000000 00000000 00000000 00000011。由于在控制台上输出的是原码所以打印3。以下为上述程序的运行结果|按位或eg:intmain(){intnum1-5;intnum27;intn2num1|num2;printf(n2%d\n,n2);return0;}num1:原码:10000000 00000000 00000000 00000101反码: 11111111 111111111 11111111 11111010补码: 11111111 11111111 11111111 11111011num2:原、反、补码00000000 00000000 00000000 00000111或运算规则为对应二进制位有1就是1同时为0才是0num1与num2的补码进行或运算结果为11111111 11111111 11111111 11111111符号位为1此结果为负数原码 补码原码为补码除符号位外的其它位取反加1**取反10000000 00000000 00000000 00000000加1 10000000 00000000 00000000 00000001由于在控制台上输出的为原码所以打印**-1**以下为上述程序的运行结果^ 按位异或eg:intmain(){intnum1-5;intnum27;intn3num1^num2;printf(n3%d\n,n3);return0;}num1:原码:10000000 00000000 00000000 00000101反码: 11111111 111111111 11111111 11111010补码: 11111111 11111111 11111111 11111011num2:原、反、补码00000000 00000000 00000000 00000111按位异或运算规则为对应二进制位,相同为0相异为1num1与num2的补码进行按位异或运算结果为11111111 11111111 11111111 11111100符号位为1此结果为负数原码 补码原码为补码除符号位外的其它位取反加1**取反10000000 00000000 00000000 00000011加1 10000000 00000000 00000000 00000100由于在控制台上输出的为原码所以打印**-4**以下为上述程序的运行结果~ 按位取反eg:intmain(){intnum0;intn4~numprintf(n4%d\n,n4);return0;}num:原反补码:00000000 00000000 00000000 00000000按位取反规则所有二进制位逐个取反0变11变0n4:补码:11111111 11111111 11111111 11111111符号位为1此结果为负数原码 补码 ,在控制台上输出的是原码因此要求n4的原码原码为补码除符号位外的其它位取反加1**取反10000000 00000000 00000000 00000000加1 10000000 00000000 00000000 00000001由于在控制台上输出的为原码所以打印**-1**以下为上述程序的运行结果在这里插入图片描述左移操作符eg:intmain(){intnum10;intn5num1;printf(n5%d\n,n5);return0;}显然n5的结果为20但num的结果还是10.总结左移的n位的结果为原数乘2的n次方注意溢出右移操作符eg1:intmain(){intnum10;intn6num1;printf(n6%d\n,n6);return0;}显然n6的结果为5但num的结果还是10.eg2:intmain(){intnum-10;intn7nm2;printf(n7%d\n,n7);return0;}解释num:原码1000 1010反码1111 0101补码1111 0110将num的补码向右移两位得**11 1101**为高位空出的两位补符号位1得1111 1101它的原码为1000 0011所以n7的值为-3.总结左移的n位的结果为原数除2的n次方向下取整注意溢出三、总结本文围绕 C 语言中的位操作符展开先给出六种位操作符的速查表再逐一用具体数值演示运算过程核心要点可以归纳为以下几点运算基于补码位操作符直接作用于内存中的补码而printf输出的是原码。因此遇到负数时必须先由原码求补码参与运算再把结果补码还原成原码才能得到正确的打印值。正负数的原反补关系正数与无符号整数的原码、反码、补码三者相同负数的反码是原码除符号位外按位取反补码是反码加 1。还原时则反向操作补码除符号位外取反加 1 得到原码。六种操作符的规则有 0 则 0、全 1 才 1|有 1 则 1、全 0 才 0^相同为 0、相异为 1~对所有二进制位含符号位逐个取反低位补 0对正数或无符号数高位补 0对负数高位补符号位 1。移位等价于乘除 2 的幂左移 n 位相当于原数乘 2 的 n 次方右移 n 位相当于原数除 2 的 n 次方并向下取整两者都要注意溢出问题。移位不改变原变量num 1、num 1只是产生一个新值num本身保持不变除非使用复合赋值如num 1。掌握「补码运算 符号位处理」这条主线再结合移位与乘除 2 的幂的对应关系就能快速手算任意两个整数之间的位运算结果也为后续学习位运算技巧如掩码、状态压缩、快速幂等打下基础。

相关推荐

我花了两周,把 PyTorch 从头翻了一遍:这 6 张图,能省你三个月弯路
我花了两周,把 PyTorch 从头翻了一遍:这 6 张图,能省你三个月弯路

文章目录 一、先聊一个所有人都经历过的瞬间 二、先立个坐标系:PyTorch 到底是什么 先感受一下这个体量 三、五块积木:模块地图 四、六条设计哲学:这才是 PyTorch 的"手感"来源 4.1 GPU-Ready:张量天生就是双栖的 4.2 磁带式自动微分:PyTorch 最骄傲的一件事 这… · 2026/11/4 2:32:15

浅谈商业模糊测试工具protocolfuzzer-青草莓科技
浅谈商业模糊测试工具protocolfuzzer-青草莓科技

protocofuzzer 是青草莓科技公司独立研发的全栈协议模糊测试解决方案,拥有完全自主知识产权,精准覆盖各类协议漏洞场景,为关键基础设施与网络应用提供主动防御能力。引擎内置231个专业测试套件,覆盖从底层硬件接口到上层应用协议的… · 2026/11/4 2:32:15

SystemVerilog 实现 32 位最低位优先编码器:从接口约定到 XSim 自检
SystemVerilog 实现 32 位最低位优先编码器:从接口约定到 XSim 自检

SystemVerilog 实现 32 位最低位优先编码器:从接口约定到 XSim 自检 多个请求同时置位时,优先编码器把请求向量转换成一个索引。本文实现的是最低索引优先:request[0] 优先级最高,request[31] 最低。输入不是 one-hot 也可以工作… · 2026/11/4 2:32:15

渗透测试工程师成长指南:从基础到实战
渗透测试工程师成长指南:从基础到实战

1. 渗透测试行业的真实挑战作为一名从业多年的网络安全工程师,我见过太多怀揣黑客梦想的年轻人,在接触渗透测试后迅速被现实击垮。这个行业远没有影视作品中那么光鲜亮丽,背后是无数个熬夜研究漏洞的夜晚和持续不断的学习压力。1.1 技术门槛&… · 2026/11/4 3:25:24

PostgreSQL慢SQL排查与优化实战指南
PostgreSQL慢SQL排查与优化实战指南

1. 慢SQL问题排查的必要性数据库性能问题就像汽车发动机的积碳——平时感觉不到,一旦爆发就会让整个系统瘫痪。作为PostgreSQL DBA,我处理过上百个慢SQL案例,其中80%的生产事故都是由于未被及时发现的问题SQL逐渐累积导致的。上周刚处理过一个… · 2026/11/4 3:25:24

多目标跟踪实战:检测、预测与匹配的工程取舍
多目标跟踪实战:检测、预测与匹配的工程取舍

简介:这份资源面向计算机视觉与信号处理方向的学习者,聚焦多目标跟踪(MTT)在MATLAB环境下的实现,适合希望从目标检测、状态估计到数据关联完整走通一遍流程的初中级读者。压缩包共3个文件,以m脚本、avi视频… · 2026/11/4 3:25:24

PostgreSQL慢SQL问题排查与优化实战指南
PostgreSQL慢SQL问题排查与优化实战指南

1. 慢SQL问题排查的必要性上周五凌晨两点,我被一阵急促的电话铃声惊醒。运维同事告诉我生产环境的订单查询接口响应时间从200ms飙升到15秒,用户投诉已经塞满了客服系统。当我连上服务器查看pg_stat_activity视图时,发现有个查询已经运行了8分… · 2026/11/4 3:25:24

Unity等距解谜工程拆解:旋转、路径重算与二次开发实战
Unity等距解谜工程拆解:旋转、路径重算与二次开发实战

简介:这份资源是面向Unity初学者与进阶开发者的《纪念碑谷》风格解谜游戏完整工程,基于Unity 2017.3版本构建,可用于学习2D与3D图形结合、场景搭建、资源管理与C#脚本逻辑等核心开发技能。压缩包共254个文件,约2.61MB,… · 2026/11/4 3:25:24

全屏歌词动画实现指南:Folia内置模式解析与性能调优
全屏歌词动画实现指南:Folia内置模式解析与性能调优

全屏歌词动画这件事,很多人第一反应是"不就是把歌词放大铺满屏幕吗"。真上手做过一轮就知道,同样是全屏,有的方案歌词一放大就糊成一片,有的动效一跑起来帧率直接腰斩,还有的在不同分辨率屏幕上位置全乱。我… · 2026/11/4 3:24:24

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46

AI辅助技术栈评估:提升研发决策效率60%
AI辅助技术栈评估:提升研发决策效率60%

1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17

从生成Token到直接决策:Jev如何重塑AI Agent工程实践
从生成Token到直接决策:Jev如何重塑AI Agent工程实践

1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17

32G统一内存跑大模型:内存账、TPS实测与端云分流
32G统一内存跑大模型:内存账、TPS实测与端云分流

想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码