位运算符:原码、反码、补码
位移(涉及到二进制中的原码,反码,补码)
⭐必记↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓:
对于有符号的数而言,有以下几点
1.二进制的最高位是符号位:0表示正数,1表示负数(区别1为真,0为假)
2.正数的原码,反码,补码都相同(三合一)
3.负数的反码=他的原码符号位不变,其余位取反(0变1,1变0)
4.负数的补码=他的反码+1
5.0的反码和补码都是0
6.计算机运算以 补码 的形式来运算(方便把正数和负数统一起来)
常见的位运算符:
例子(区分取反和反码):
~2=首先得到2的补码=因为2是正数,所以它的补码等于原码
=四个字节有32位(一个int是4字节,一个字节是八位)
=00000000 00000000 00000000 00000010
=取反得到取反的补码11111111 11111111 11111111 11111101
=补码转原码
=最高位符号数是1
=是负数,先求反码(反码=补码-1)
=11111111 11111111 11111111 11111100
=将反码转为原码10000000 00000000 00000000 00000011
=-3
~-5=4
2&-3=获取2的补码和-3的补码
=2的补码为:00000000 00000000 00000000 00000010,
-3的原码为:10000000 00000000 00000000 00000011,
-3的反码为:11111111 11111111 11111111 11111100,
-3的补码为:11111111 11111111 11111111 11111101,
=按位与得到:00000000 00000000 00000000 00000000,
=0
2|3=3
2^3=1
位运算符和移位运算符(同样是处于补码情况下运算)
>>和<<:算术右移和算术左移
>>算术右移:低位溢出,符号位不变,用符号位补溢出的高位
<<算术左移:符号位不变,低位补0
例子
int a=1>>2; // a相当于1/2/2=0
int b=10>>2; // a相当于10/2/2=2(定义是正数,小数部分丢失)
int c=-1>>2; //如下
-1的原码:10000000 00000000 00000000 00000001
-1的反码:11111111 11111111 11111111 11111110
-1的补码:11111111 11111111 11111111 11111111
-1>>2:(正数左边补0,负数左边补1,右边舍弃)
得到:11111111 11111111 11111111 11111111(已经右移2位,这是补码)
转反码(补码-1):11111111 11111111 11111111 11111110
转原码:10000000 00000000 00000000 00000001
结果为-1
int d=1<<2; //
练习题(答案是白色字体):
~2=-3
2&3=2
2|3=3
~-5=4
13&7=5
5|4=5
-3^3=-2
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)