java的无符号右移(>>>)及原码、反码和补码的关系
什么是原码反码补码
1100110011 原
1011001100 反 除符号位,按位取反
1011001101 补 除符号位,按位取反再加1 正数的原反补是一样的
◆一个正数的补码和其原码的形式相同。 如果定义了一个整型变量i: int i; /*定义为整型变量*/ i=lO;/*给i赋以整数10*/
十进制数10的二进制形式为1010,在微机上使用的C编译系统,每一个整型变量在内存中占2个字节。
图2.2(a)是数据存放的示意图。图2.2(b)是数据在内存中实际存放的情况。
◆求负数的补码的方法是:将该数的绝对值的二进制形式,按位取反再加1。 例如求-10的补码:①取-10的绝对值10;②10的绝对值的二进制形式为1010;③对1010取反得1111111111110101(一个整数占16位);④再加1得1111111111110110,见图2.3。
整数的16位中,最左面的一位是表示符号的,该位为0,表示数值为正;为1则数值为负。
需要特别注意的是: 负数都是用补码参与运算的。得到的也是补码,需要减1取反获得原码。
千万要理解这句话!!!
转载于:https://blog.51cto.com/fuxiaofeng/1335568