位运算符:原码、反码、补码

位移(涉及到二进制中的原码,反码,补码)

⭐必记↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓:

对于有符号的数而言,有以下几点

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

posted @   Morning枫  阅读(281)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
点击右上角即可分享
微信分享提示