关于java原码,补码,反码和移位运算的一些总结

整数的原码,补码,反码是一致的
负数的反码=原码取反(符号为不变)
负数的补码=负数的反码+1;
重点:在JAVA里,使用8进制和16进制给一个int值赋值时,是直接存的补码!!!并且运算时也是采取补码的形式运算。
下面为测试例子:
这里写图片描述
0x82表示为2进制:10000010,如果0x82是原码的话,那么输出应该为-2,如果0x82为补码,那么原码为11111110,输出应该为-126。输出如下:
这里写图片描述
从输出中,我们可以知道,0x82是作为补码的形式存入的,并且输出的也是-126的补码,不是原码!!

">>“和”>>>”的区别
">>为算术位移,即带符号的位移,>>时高位补符号位,<<时低位补0,如下:"
这里写图片描述
–5的原码为:0x80000005,-5的补码为0xFFFFFFFB,右移2为后补码高位补1,移位后的补码为0xFFFFFFFE,则移位后的原码为0x80000002,输出为-2!
这里写图片描述
那么-2<<2等于多少呢?结果为-8,并不是-5!
这里写图片描述
输出:-8!
因此,位移1位不能简单的理解为乘以2或者除以2,就像-1右移1位还是等于-1一样,应该理解移位运算的原理。
">>>"为逻辑位移,即不带符号的位移,>>>时高位补0如下:
这里写图片描述
当0xF0000000逻辑右移24位后,结果为0x000000F0,因此输出为240!

猜你喜欢

转载自blog.csdn.net/qq_27368993/article/details/82688385