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

C语言06(操作符)

目录

学前须知:

1.移位操作符(<<,>>)

1.1左移操作符

2.2右移操作符

2.位操作符(&,|,^,~)

2.1位操作符的作用

2.2位操作符解题

2.2.1 第一题

2.2.2 第二题

3.逗号表达式

4.总结


学前须知:

1.数据在计算机中是以补码存储的。

2.位移操作符,位操作符直接对内存中存储的补码进行运算。

3.正数的原码,反码,补码均相同。

4.负数原码转为补码,补码转为原码都是符号位不变,数值位取反再+1 。

1.移位操作符(<<,>>)

1.1左移操作符

已知int型数据在内存中占4个字节的大小,且int默认是有符号整数,10的二进制为1010,当左移之后最左边的二进制位会溢出而被抛弃,最右边的数默认补0,因此数值变成了20。

另外还需注意,我们虽然对num << 1,但是num本身的值是不会变的,还是10。

2.2右移操作符

右移操作符和左移操作符大体上一样,但是也有区别,主要分为两种。

1.逻辑右移:左边空出来的用0填充,右边丢弃。

2.算数右移:左边用该值的原符号位填充,右边丢弃。

那么我们该如何判断是逻辑右移还是算术右移,这个我们可以自己验证一下。

假如说给一个负数,比如说-10,他的符号位是1,那么我们假设我们使用的编译器是算术右移,那么-10的补码右移过后,最左边就应该补1,得到的还是一个负数,那如果我们编译器得到的是逻辑右移呢,右移之后,左边补0,也就是说最后得到的是一个正数。

简单来说:给一个负数,如果右移过后的结果是正数,那么就是逻辑右移,如果结果还是负数,那么就是算数右移。

可以看出-10右移之后的结果是-5,还是一个负数,因此我们使用的解释器使用的是算术右移。同样,我们对num >> 1之后,num本身的值不会发生变化。

2.位操作符(&,|,^,~)

2.1位操作符的作用

& //按位与 | //按位或 ^ //按位异或 ~ //按位取反

需注意:位操作符的操作数只能是整数。

作用:

1.按位与:对齐的二进制位如果有一个0,该位按位与之后的结果就是0。

2.按位或:对齐的二进制位如果有一个1,该位按位或之后的结果就是1。

3.按位异或:对齐的二进制位只要不相同,该位异或之后的结果就是1。

以上三个操作符的操作数都是2个。

4.按位取反:操作数只有一个,0变1,1变0。

具体如下:

2.2位操作符解题

使用位操作符解题时我们需要先知道关于异或的一些操作

1. a ^ 0 之后的结果还是a

2. a ^ a 之后的结果是0

3.异或支持交换律,也就是说 a ^ b ^ a 其实等同于 a ^ a ^ b ,那么我们就能进一步得到 a^a^b

-> 0^b -> b

以上的结论都可以自己用数值验证。

2.2.1 第一题

如何在不创建第三个变量的前提下,实现两数交换

2.2.2 第二题

编写代码实现:求⼀个整数存储在内存中的⼆进制中1的个数。
要想解这道题我们需要知道这样一个结论:num & 1就能得到num最后一位的值
num & 1 == 1 ---------- num最后一位是1
num & 1 == 0 ---------- num最后一位是0
原理很简单,因为假设是一个int型的数值1按位与上num,那么1的补码就是000……(31个0)……1,只有最后一位是1,所以得到的结果中前面31位必然是0,最后一位要看num的最后一位是否是1,是1的话那么最终结果就是1,num最后一位是0的话,那么最终结果就是0。
因此我们解决该问题的方法如下:
法一:
法二:我们依然需要知道这个结论
每次执行 n = n & (n-1) 得到的结果中,n最右边的1会变成0
可以发现,n本来是1101,结果每执行一次 n & (n-1) 时,n最右边就会少一个1,所以利用这个结论,我们也能解这道题目

3.逗号表达式

逗号表达式,就是⽤逗号隔开的多个表达式。
逗号表达式,从左向右依次执⾏。整个表达式的结果是最后⼀个表达式的结果。

4.总结

通过以上内容,我们可以总结一下位操作符的一些运算技巧。

1. a ^ 0 之后的结果还是a

2. a ^ a 之后的结果是0

3. 异或支持交换律

4. n & 1能得到n最后一位是1还是0

5. 每次执行 n = n & (n-1) 得到的结果中,n最右边的1会变成0

http://www.jsqmd.com/news/862049/

相关文章:

  • VxWorks网络通信模块:网络协议栈解析(第五部分)
  • 鸿蒙备考题库页面构建:错题本、小组榜单与备考提示模块详解
  • QQ家园迷你屋单机版下载:复刻05年经典网页社区,像素风直接拉满
  • ComfyUI全面掌握-知识点详解——ComfyUI 开发与扩展基础(开发指南+环境搭建)
  • 海量分布式储能节点云边协同架构:边缘网关异步心跳注册与状态上报Python实战
  • 输出函数print
  • 内存管理
  • 【RAG】【retrievers08】基于Together.ai长上下文嵌入的混合检索
  • 4 类国产企业即时通讯平台推荐榜:如何为安全协同构建私有化底
  • AI 大模型技术架构演进与应用落地瓶颈分析
  • 西门子PLC对接须知:从通信到编程的实战指南
  • 用LLM从零搭3D小世界编辑器|小白也能搞定的AI Native开发实录
  • 【RHCA+】info命令(模块化的命令帮助文档)
  • 【RAG】【retrievers09】Pathway检索器:实时数据索引与检索
  • 适配多层级组织管理,科学运用 360 度反馈打造公平高效绩效文化
  • 2026年整箱榨菜厂家精选合集 - 行业平台推荐
  • 第2章:文档加载与智能分块——RAG的第一步
  • HTTP状态码与请求方式全解析【个人八股】
  • VGG16猫狗二分类
  • 工程实战:基于 GPIO 物理旁路极速部署机器人电梯调度系统的设计
  • 微波遥感杂谈五(微波辐射计)
  • 仪式感,从来与你无关
  • 慢驴效应(懒驴效应)
  • 3.url编码
  • Spec-Kit + Superpowers 实战:Go语言博客论坛系统的规范驱动开发
  • VisionPro 中 验证工具 ID Verfiction
  • 性价比高的国产PLM软件公司
  • 关于 ops-transformer 和它背后那套系统,几个我见过最常见的误解
  • 数采网关的应用与特点
  • 2025-2026年国内跨境电商TRO解冻机构:五大机构产品好的产品下架风险应对注意事项