整数的二进制表示形式有三种:原码,反码,补码
存储到内存中:补码(所以移位也是用补码移!!!)
注:正整数的原码,反码,补码相同
补充:
正数的原反补码:
负数的原反补码:
第一位为符号位:正数是0,负数是1,
根据二进制的算法(…8,4,2,1)可以得出原码为:10000000000000000000000000000001;
反码,可以理解为与原码的1和0反过来(除了第一位符号位),那么反码即为:11111111111111111111111111111110;
而补码就更好理解了,反码+1=补码,所以补码为:11111111111111111111111111111111;
右移操作符:
右移运算分为两种:算术右移,逻辑右移
算术右移:右边丢弃,左边补原符号位(正补0,负补1)
逻辑右移:右边丢弃,左边补0
大多数情况都是使用算术右移
正数的两种右移方式得出的结果都相等
例:
正数情况
负数情况
右移后的补码与原来的补码相同所以还是打印出-1;
左移操作符:
左边丢弃,右边补0
正数情况
例:
过程如下图:
最后打印出的c结果为10;
负数情况
最后打印出b的结果为-2(注意原反补码的转换)
注: