当前位置: 首页 > article >正文

深入解析C语言位运算与操作符

目录1. 原码反码补码2. 移位操作符2.1 左移操作符2.2 右移操作符3. 位操作符|^~3.1 按位与3.2 按位或|3.3 按位异或^3.4 按位取反~3.5 一道比较变态的面试题3.6 练习练习1练习24. 逗号表达式5. 下标访问[]函数调用()5.1 [] 下标引用操作符5.2 函数调用操作符1. 原码反码补码原码直接将数值按照正负数的形式编译成二进制得到的就是原码。反码将原码的符号位不变其他位依次按位取反就可以得到反码。补码反码1就得到补码。补码得到原码也是可以使用取反1的操作。正整数的原反补码都相同。负整数的三种表示方法各不相同。举个例子于是我们便可以总结出它们之间的关系我们可以发现直接从补码得到原码是采用先取反再1的操作那么是这样的吗我们可以举个例子那么可能会问研究原码补码有什么用呢其实整数在内存中存储的时候使用的是补码CPU在计算的时候也是使用补码计算的但是打印出来或者人使用的时候都是原码。2. 移位操作符左移操作符右移操作符注移位操作符的操作数只能是整数。2.1 左移操作符移位规则左边抛弃右边补0。举个例子从上面的例子中我们可以发现10左移1位变成了20可这是为什么呢其实我们可以根据左移位规则来推断像这样移位之后再从右往左依照二进制的计算方法便可以得到20。1.将num移动1位后的结果赋值给了r2.实际上num的值是不变的。注意进行移位操作时是对补码进行移位而最后打印是将补码转化为原码再对原码进行打印。2.2 右移操作符移位规则首先右移运算分两种1.逻辑右移左边用0填充右边丢弃2.算术右移左边用原该值的符号位填充右边丢弃。说明逻辑右移与上述左移相似算术右移如果是正数通通补0如果是负数通通补1。警告对于移位运算符不要移动负数位这个是标准未定义的。例如3. 位操作符|^~注意它们的操作数必须是整数字符类型。3.1 按位与ab:(拿a与b的补码进行计算对应二进制位上有0则为02个同时为1才为1算出的结果为补码举个例子3.2 按位或|它与按位与做法相似只不过在计算时只要有1则为1两个同时为0才为0。举个例子3.3 按位异或^运算规则相同为0相异为1。举个例子3.4 按位取反~运算规则原本是1全变为0原本是0全变为1。举个例子3.5 一道比较变态的面试题问题不能创建临时变量第三个变量实现两个整数的交换。可以看出以上这种方法确实符合题意不存在第三个变量也实现了两个数的交换但这种方式也存在一定的风险如果a和b非常大ab的值超出整型表示的最大值则可能会出现溢出的问题。那么我们应该如何解决呢这时我们可以试试异或使用异或后我们可以发现a与b发生了交换那其中的原理又是什么呢首先我们要知道异或的运算规则是相同为0相异为1。且a^0aa^a0于是我们可以知道3^5^35,3^3^55。所以异或是支持交换律的。有了上面的发现我们再来看下上面那道问题。所以便可以得以解决。3.6 练习练习1问题求一个整数存储在内存中的二进制中1的个数其实内存中的二进制中1的个数就是指补码的二进制中1的个数。这时候我们可以联想一下之前我们是如何求十进制中的每一位的呢就是进行%10/10的操作那对于二进制类比可知也就是对其进行%2/2的操作于是便可以这样编写代码可是这个代码就是完全正确的吗可以发现当我们输入-1的时候输出补码中1的个数为0很显然这是错误的。那我们应该怎么做呢我们这时候可以试着借助按位与-11: 10000000 00000000 00000000 00000001 -----(-1的原码) 11111111 11111111 11111111 11111110 -----(-1的反码) 11111111 11111111 11111111 11111111 -----(-1的补码) 00000000 00000000 00000000 00000001 -----( 1的补码当我们将-11时便可以得到-1中的二进制中最低位的值将-1换位任意数也是一样当num11时就说明num的最低位是1当num10时就说明num的最低位是0。那如果要检验num的其他位是否也为1该怎么做呢这时就可以使用我们学过的右移位操作符使其右移1位。因此所以使用这种方法计算出来的值便是正确的但其实这也不是最终方法还有一种方法首先做个铺垫先给出一个表达式nnn-1假设n13其二进制位1101于是n 1101 n1 1100 新的n 1100 n-1 1011 n 1000 n-1 0111 n 0000 ​于是我们可以发现每当nn-1时n的二进制从右往左数遇到的第一个1会被去掉就像上面的例子一样去1这个操作被执行了三次说明其中有3个1。因此int main() { int num 0; int count 0; scanf(%d, num); int i 0; while (num) { num num (num - 1); count; } printf(%d\n, count); return 0; }这种方法就比上面的方法更加高效因为上面那种方法无论有几个1都会执行32次而这种方法有几个1就执行几次相比之下就更加高效了。练习2问题二进制位置0或者置1编写代码将13二进制序列的第5位修改为1然后再改回0结合以上知识便可以得出4. 逗号表达式逗号表达式从左向右依次计算整个表达式的结果时是最后一个表达式的结果。举个例子注意一定要先从左向右依次计算最后再取最后一个表达式的结果。5. 下标访问[]函数调用()5.1 [] 下标引用操作符5.2 函数调用操作符

相关文章:

深入解析C语言位运算与操作符

目录 1. 原码,反码,补码 2. 移位操作符 2.1 左移操作符 2.2 右移操作符 3. 位操作符:&,|,^,~ 3.1 按位与:& 3.2 按位或:| 3.3 按位异或:^ 3.4 按位取反&…...

阿里云千问大模型API申请避坑指南:从注册到调用的完整流程

阿里云千问大模型API实战指南:从零到高效调用的全流程解析 第一次接触阿里云千问大模型API时,我花了整整三天时间才成功完成第一个有效调用。期间踩过的坑包括密钥权限配置错误、计费方式理解偏差、请求参数格式不对等典型问题。本文将把这些经验转化为系…...

2026 RAG 全景落地教程(非常详细),从大模型基座到 Agent 记忆从入门到精通,收藏这一篇就够了!

这是一份让你看完就能动手,少走半年弯路的实战指南。 为什么你必须搞懂 RAG 2023 年是大模型“百模大战”年,所有人都在刷榜单、比参数。2024 年起,战场转移了——谁能把大模型真正用起来,谁才有价值。 而检索增强生成&#xf…...

百考通:AI精准精准赋能论文降重与去AI痕迹,让学术成果更高效、更专业

在学术写作与论文发表的过程中,重复率过高、AI生成痕迹明显,是困扰无数学生与科研工作者的核心难题。不仅可能导致查重不通过,更会影响学术诚信与成果认可度。百考通(https://www.baikaotongai.com) 凭借智能文本优化技…...

【实测】GitNexus实测:拖入GitHub链接秒出代码知识图谱,今天涨了857星

腾讯10年程序员带你实测GitNexus——一款零服务器、纯浏览器端的代码知识图谱引擎,内置Graph RAG智能问答。今天GitHub Trending单日涨857星。 文章目录前言一、背景与痛点1.1 问题描述1.2 现有方案的不足二、GitNexus核心能力详解2.1 零服务器架构2.2 交互式知识图…...

【深度】GPT-6 定档4月14日 × Claude 4小时攻破FreeBSD:CUDA转CANN迁移实战 + AI安全防御架构全解

摘要 4月第一周同时爆了两个大的——GPT-6代号Spud(土豆)定档4月14日,性能比GPT-5.4涨了40%,200万Token上下文,ChatGPTCodexAtlas三合一;Claude那边拿着一份漏洞公告4小时攻破了FreeBSD内核拿到Root。本文…...

Vivado硬件调试避坑指南:为什么你的ILA信号总被优化?(附解决方案)

Vivado硬件调试避坑指南:为什么你的ILA信号总被优化?(附解决方案) 调试FPGA设计时,最令人抓狂的莫过于在ILA中设置好的信号,综合后却神秘消失。这背后是Vivado综合器的优化机制在作祟——它像一位过于热心…...

从零构建数字货币量化交易系统:Python实战指南

1. 为什么选择Python构建量化交易系统? 在数字货币市场这个724小时运转的竞技场中,量化交易就像一位不知疲倦的钢铁战士。我2018年第一次尝试用Python写交易策略时,发现它简直是量化的"瑞士军刀"。想象一下,你正在用Exc…...

人形机器人核心部件揭秘:减速器、传感器如何撑起宇树和智元的未来?

人形机器人核心部件揭秘:减速器与传感器的技术革命 当波士顿动力的Atlas完成后空翻,当特斯拉Optimus在工厂灵活抓取零件,这些看似科幻的场景背后,是无数精密部件协同工作的结果。人形机器人的核心部件——减速器和传感器&#xff…...

JavaScript中函数体代码量对V8内联优化特性的影响

V8是否内联函数取决于函数体的可预测性与优化友好度而非单纯行数:简单、纯函数、低复杂度AST更易内联;含try/catch、eval、闭包等结构即使短也常被拒绝;可通过--trace-inlining验证,优化应重结构清晰而非盲目压缩。函数体代码量直…...

西门子S7_200PLC与MCGS组态在污水处理控制设计中的应用

西门子S7_200PLC和MCGS组态的污水处理控制设计老铁们今天咱们唠点实在的工业自动化应用,污水处理厂里那套S7-200和MCGS组态配合的骚操作。这玩意儿可不是课本上那些理论,是实打实在某县污水处理站跑了两年的成熟方案。先说核心控制逻辑,五个污…...

MCGS 基于PLC的风力发电控制系统 带解释的梯形图程序,接线图原理图图纸,io分配

MCGS 基于PLC的风力发电控制系统 带解释的梯形图程序,接线图原理图图纸,io分配,组态画面最近在搞风力发电控制系统,发现MCGS和PLC的组合真是工业自动化领域的黄金搭档。今天就拿个真实项目里的风机控制程序开刀,带大家…...

Python flask django大学生一体化服务系统 校园生活服务平台 选课 失物招领 自习室预约,实习系统y98ioc9x

目录同行可拿货,招校园代理 ,本人源头供货商功能模块分析技术架构特性扩展接口项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作同行可拿货,招校园代理 ,本人源头供货商 功能模块分析 校园生活服务平台 整合校内高频生活需求&a…...

Golang GORM怎么做Scopes复用_Golang GORM Scopes教程【推荐】

Scopes 是接收并返回 *gorm.DB 的函数,用于链式构建查询;需严格签名、避免提前执行、显式传参、控制分页参数、顺序影响SQL逻辑、事务中注意句柄、不处理错误。Scopes 就是带参数的 func(*gorm.DB) *gorm.DB它不是魔法,就是个普通函数签名——…...

OpenMMLab 环境配置避坑指南:从 ModuleNotFoundError 到 YOLO 模型成功部署

1. 环境配置的常见报错与诊断方法 当你第一次尝试在OpenMMLab框架下运行YOLO模型时,ModuleNotFoundError可能是最令人头疼的拦路虎。这个报错看似简单,背后却可能隐藏着多种环境配置问题。我最近在帮团队新人配置环境时,就遇到了至少三种不同…...

电源PFC入门 TI单相三相维也纳VIENNA整流器无桥 原理图PCB资料 一个PFC设计案例...

电源PFC入门 TI单相三相维也纳VIENNA整流器无桥 原理图PCB资料 一个PFC设计案例,大量的PFC相关的资料。 注意:设计案例无核心小板。电源设计里PFC总像个磨人的小妖精,尤其是做工业级大功率设备的时候。最近折腾TI的维也纳整流器方案发现&…...

如何用ContextMenuManager轻松管理Windows右键菜单:终极效率提升指南

如何用ContextMenuManager轻松管理Windows右键菜单:终极效率提升指南 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你是不是也经常被Windows右键菜…...

分切机程序开发:上下收放卷张力控制实现

分切机程序 ,上下收放卷张力控制,无电子凸轮功能。 触摸屏威纶通,PLC是三菱FX3U系列 在自动化生产领域,分切机的稳定运行至关重要,尤其是上下收放卷张力的精准控制。本文将探讨基于威纶通触摸屏和三菱FX3U系列PLC&…...

IDEA中Module工程重命名的正确姿势与避坑指南

1. 为什么需要重命名Module工程? 在IntelliJ IDEA中开发多模块项目时,Module命名往往不是一蹴而就的。我遇到过很多次这样的情况:项目初期随便起了个module名字,随着业务发展发现名称与实际功能严重不符。比如有个数据分析项目&a…...

雀魂AI助手Akagi:革新麻将竞技的智能决策系统

雀魂AI助手Akagi:革新麻将竞技的智能决策系统 【免费下载链接】Akagi 支持雀魂、天鳳、麻雀一番街、天月麻將,能夠使用自定義的AI模型實時分析對局並給出建議,內建Mortal AI作為示例。 Supports Majsoul, Tenhou, Riichi City, Amatsuki, wit…...

我做了一个精简版 Claude Code,朋友说“你咋这么卷”

大家好,我是拭心。你有没有好奇过 Claude Code 是怎么工作的?输入一个需求,它就自己写代码、跑命令,整个过程就像有个程序员在终端里安静地帮你干活。最近 Claude Code 源码泄露,让我们发现,它的核心机制原…...

3个核心功能让你的AMD处理器性能提升20%:SMUDebugTool零基础上手与性能调优实战

3个核心功能让你的AMD处理器性能提升20%:SMUDebugTool零基础上手与性能调优实战 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table…...

Transformer变体进化史:从基础架构到高效优化策略

1. Transformer基础架构的诞生 2017年那篇《Attention Is All You Need》论文像一颗炸弹,彻底改变了NLP领域的游戏规则。当时我在做机器翻译项目,还在和RNN的梯度消失问题搏斗,Transformer的出现简直像救世主降临。它的核心创新点可以用一个厨…...

vue 求助

这个浅灰色的背景框怎么改啊,没招了...

智能体公司的发展都会变成解决方案型公司

当前AI智能体公司众多,但多数难以持续盈利。主要原因在于AI本质是工具,仅能解放生产力而非解决生产关系,对业务直接收入提升有限;其次,多数团队缺乏行业经验,商业模式局限于传统互联网模式,难以…...

新手入门指南:在快马平台上用openclaw重启版本实现首个爬虫项目

最近在学习网络爬虫,发现openclaw重启版本对新手特别友好,于是尝试在InsCode(快马)平台上做了一个简单的新闻头条抓取项目。整个过程比想象中顺利,分享下我的学习路径和踩坑经验。 环境准备与库安装 传统爬虫项目最头疼的就是环境配置&#x…...

3步完成Windows系统净化:轻量优化工具Win11Debloat使用指南

3步完成Windows系统净化:轻量优化工具Win11Debloat使用指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter a…...

用快马AI快速原型一个全球数据监控仪表盘,十分钟搞定基础框架

今天想和大家分享一个快速搭建全球数据监控仪表盘的经验。作为一个经常需要分析国际数据的产品经理,我一直在寻找能快速验证想法的工具。最近发现InsCode(快马)平台特别适合做这种原型开发,十分钟就能搞定基础框架。 项目构思 这个仪表盘需要展示全球主要…...

新手避坑指南:用STC AI8051U和GPS搞定智能车气垫越野组(附完整代码)

智能车竞赛气垫越野组实战指南:从零搭建到精准导航 1. 初识气垫越野组:竞赛特点与技术挑战 智能车竞赛气垫越野组是近年来最富挑战性的组别之一,它要求参赛车辆在完全依靠气垫推进的情况下,自主完成室外复杂地形的导航任务。与传统…...

别再只查表了!用MATLAB调用Python包(如NumPy, Pandas)的完整环境配置教程

MATLAB与Python强强联合:从环境配置到实战调用的全流程指南 当MATLAB遇上Python,会碰撞出怎样的火花?作为两个在科学计算领域举足轻重的工具,MATLAB以其强大的矩阵运算和可视化能力著称,而Python则凭借丰富的第三方库生…...