原码、反码、补码与移位操作符

原码、反码、补码与移位操作符

原码、反码、补码

计算机中以补码的形式存放数值
转换规则:
正整数的原码都是其二进制,负整数原码是其本身,最高位用1表示符号
正整数的反码就是其二进制,负整数反码是原码取反,符号位不变
正整数的原码,反码,补码都是其二进制
负整数的补码是反码加1。

移位操作符

>>:

算数右移位运算,也称作带符号右移位运算
int a = 12;
int b = a>>1;
b=6;
12的二进制补码形式为
0000 1100
右移一位
0000 110
补位,因为是正数所以补0
0000 0110 结果为6

int a = -12;
int b = a>>1;
b=-6;
-12的二进制形式为
1000 0000 0000 0000 0000 0000 0000 1100
反码
1111 1111 1111 1111 1111 1111 1111 0011
补码
1111 1111 1111 1111 1111 1111 1111 0100
右移一位
1111 1111 1111 1111 1111 1111 1111 010
补位,因为是负数所以补1
1111 1111 1111 1111 1111 1111 1111 1010(这是移位运算后的二进制补码,所以要变成原码)
取反
1000 0000 0000 0000 0000 0000 0000 0101
+1
1000 0000 0000 0000 0000 0000 0000 0110 结果为-6

>>>

逻辑右移位运算符,也称不带符号右移位运算符

int a = 12;
int b = a>>>1;
b=6;
12的二进制补码为
0000 1100
右移一位(逻辑右移1位是舍弃二进制数的最后一位,开头补0)
0000 0110 为6

int a = -12;
int b = a>>>2;
b=1073741821;

-12的二进制补码是12的二进制补码取反+1
1111 1111 1111 1111 1111 1111 1111 0100
右移二位(舍弃最后两位,开头补2个0)
0011 1111 1111 1111 1111 1111 1111 1101

<<

左移位运算,也称为不带符号左移位运算
int a = 12;
int b = a<<1;
b=24;

12的二进制补码为
0000 1100
左移一位(舍弃开头一位,尾部添一个0)
0001 1000

int a = -12;
int b = a<<2;
b=-48

-12的二进制码为
1000 0000 0000 0000 0000 0000 0000 1100
反码
1111 1111 1111 1111 1111 1111 1111 0011
补码
1111 1111 1111 1111 1111 1111 1111 0100
左移2位(舍弃开头两位,末尾添2个0)
1111 1111 1111 1111 1111 1111 1101 0000
取反
1000 0000 0000 0000 0000 0000 0010 1111
+1
1000 0000 0000 0000 0000 0000 0011 0000
结果为-48

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值