Java 学习:原码、反码、补码
原码、反码、补码
计算机只知道 0 和 1,所以在运算的时候是以二进制方式计算的:
-
二进制的最高位是符号位:0表示正数,1表示负数
-
正数的原码、反码、补码都一样(三码合一)
-
负数的反码等于它的原码符号位不变,其他位取反(0->1、1->0)
-
负数的补码等于它的反码加1,负数的反码 = 负数的补码 - 1
-
0的反码、补码都是0
-
java没有无符号数,换言之,java中的数都是有符号的
-
在计算机运算的时候,都是以补码的方式来运算的
-
当我们看运算结果的时候,要看它的原码
什么是补码:【一听就懂】什么是补码
示例1:3 + (-3) 的运算
//3的原、反、补码【正数的原码、反码、补码都一样(三码合一)】
//00000000 00000000 00000000 00000011
//-3的原码
//10000000 00000000 00000000 00000011
//-3的反码
//11111111 11111111 11111111 11111100
//-3的补码
//11111111 11111111 11111111 11111101
//3 + (-3) 进行加法运算
//00000000 00000000 00000000 00000011
//11111111 11111111 11111111 11111101
//00000000 00000000 00000000 00000000 => 看最高位,运算结果为正数
//又因为正数的 原码、反码、补码都一样,所以结果为 0
//以上运算结果为 0 即:3 + (-3) = 0
示例1:9 + (-33) 的运算
//9的原、反、补码【正数的原码、反码、补码都一样(三码合一)】
//00000000 00000000 00000000 00001001
//-33的原码
//10000000 00000000 00000000 00100001
//-33的反码
//11111111 11111111 11111111 11011110
//-33的补码
//11111111 11111111 11111111 11011111
//9 + (-33) 进行加法运算
//00000000 00000000 00000000 00001001
//11111111 11111111 11111111 11011111
//11111111 11111111 11111111 11101000 => 最高位为1,运算结果为负数,显示结果要转成原码
//11111111 11111111 11111111 11100111 => 用补码 -1 先得到反码
//10000000 00000000 00000000 00011000 => 再用反码得到原码,结果为 -24
//结果为 -24,即 9 + (-33) = -24
作者:typeof(光)
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原
文连接,否则保留追究法律责任的权利。
文连接,否则保留追究法律责任的权利。