原码:原码是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 如:如果是八位二进制1即用00000001表示,-1即用10000001表示。
反码:正数的反码就是其本身,负数的反码是在其原码的基础上,符号位不变,其他各个位取反。
补码:正数的补码就是其本身,负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)。
利用原码计算:1 - 1 = 1 + (-1) = [00000001]原 + [10000001]原 = [10000010]原 = -2,明显并不正确,而当利用反码时:1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原= [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0,虽然计算结果正确,但是0带的负号没有意义,利用补码时1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]补 + [1111 1111]补 = [0000 0000]补=[0000 0000]原,就能解决这个问题,当利用Java进行计算1-1时所得结果为0,所以Java中数字是用补码进行表示的。
原文地址:https://www.cnblogs.com/123456www/p/9746898.html
时间: 2024-10-10 13:51:29