原码、反码、补码是对于计算机运算上的。在计算机系统中,信息是用二进制数表示的。在计算机系统中,数值一律是用补码来表示的和存储的,且对于二进制数值来说,最高位是符号位,数1表示数值为负数,0表示数值为正数,其余位表示数的绝对值。例如:
int型十进制数123的二进制表示为:
0000 0000 0000 0000 0000 0000 0111 1011;这就是十进制数123的原码。
易知,-123的原码为:
1000 0000 0000 0000 0000 0000 0111 1011;(最高位是符号位)。
反码:只要记住对于正数而言,正数的反码就是它的原码,负数的反码就是除最高位不变,其余位取反,即1取反为0,0取反为1。例如;
123的反码为:
0000 0000 0000 0000 0000 0000 0111 1011;
-123的反码为:
1111 1111 1111 1111 1111 1111 1000 0100;
补码:只要记住对于正数而言,正数的补码就是它的原码,也是它的反码。负数的补码是原码取反后+1。(取反得到反码,符号位不变)例如:
123的补码为:
0000 0000 0000 0000 0000 0000 0111 1011;
-123的补码为:
1111 1111 1111 1111 1111 1111 1000 0101;
1.已知反码求原码:
对于正数,可知反码即原码。对于负数,同样取反可得,一定要记得符号位保持不变,即负数反码的反码是原码。
2. 已知补码求原码:
对于正数,可知补码即原码。对于负数而言有两种方式求其原码,但是原理一样。第一种:按照求取补码的步骤反过来做即可。也就是说,先从补码-1,得到反码,再从反码得到原码。第二种:将补码看做原码,再取一次补码即可,读者可利用前边的例子证明。
总而言之,反码的反码是原码,补码的补码是原码。这里要注意正负数的区分。
Java原码、反码、补码浅谈
最新推荐文章于 2022-10-04 15:58:09 发布