C语言和指针-回顾07-算数移位和逻辑移位
2021/6/30 23:51:26
本文主要是介绍C语言和指针-回顾07-算数移位和逻辑移位,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
逻辑移位:不关注符号位(最高位),每个bit向左或者向右移位,最高位或者最低位由0补齐。
算数移位:关注符号位(最高位)。
算数左移:跟逻辑左移一样,每个bit向左移位,低位由0补齐。
算数右移:符号位(最高位)保持不变,每个bit向右移位,次高位由符号位补齐。
例子 1:逻辑移位和算数移位都一样的结果
十进制 34 :34 /16 = 2余2:十六进制 0x22:二进制 0010,0010
左移:二进制 0100,0100:十六进制 0x44:十进制 68
右移:二进制 0001,0001:十六进制 0x11:十进制 17
例子 2:算数移位
十进制 -34 :0010,0010取反后+1:二进制 1101,1110:十六进制 0xDE
左移:二进制 1011,1100:十六进制 0xBC:十进制 -68(减1后:1011,1011,取反后:0100,0100,0x44:68)
右移:二进制 1110,1111:十六进制 0xEF:十进制 -17(减1后:1110,1110,取反后:0001,0001,0x11:17)
从上面的两个例子看,算数移位和逻辑移位就是把某一个数字除2或者乘2。
但是需要注意这个结论的前提条件是不超过取值范围。
比如:signed char,取值范围是-128 ~ 127。
负数:1000,0000 ~ 1111,1111(-128 ~ -1),正数:0000,0000 ~ 0111,1111(1 ~ 127)
如果-34左移2位会怎样?是-34 * 2 * 2 = -136吗?不对的,因为-136已经超出了signed char取值范围了。
-34左移2位后:0111,1000。符号位都变了,变成了正数。十进制值:120(十六进制0x78)
这篇关于C语言和指针-回顾07-算数移位和逻辑移位的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升
- 2024-05-08代码报错不用愁,CodeGeeX一键完成代码修复、错误解释的功能上线了!
- 2024-05-08今天开始程序员不用再发愁写commit message了,全部由CodeGeeX自动完成!