计算机中数据中都是二进制形式存储
不同进制在Java代码中的表现形式:
二进制:由0和1组成,代码中以0b开头
十进制:由0~9组成,代码中不加任何前缀
八进制:由0~7组成,代码中以0开头
十六进制:由0~9和a~f组成,代码中以0x开头
任意进制转十进制:
十进制转其他进制:除基取余法
不断的除以基数(转几进制,基数就是几)得到余数,直到商为0,再将余数倒着拼起来即可。
原码概念:
原码有一个弊端,如果是负数计算,结果就会出错,实际运算的结果跟我们预期的相反,例如:
10000000=0 10000000(0)+1(00000001)应该等于0+1=1;但实际等于10000001=-1计算错误,于是产生了反码。
反码概念:
反码有一个弊端,反码只能用于纯负数计算,当负数与正数进行计算大于0时结果错误,原因由于0的反码有两种形式,00000000(+0)和10000000(-0),例如:
-3(反码11111100)+4(反码00000100)=00000000=0了 正确结果应该是1,所以产生了补码,故负数计算用补码计算才能保持正确,负数的补码为反码+1 ,正数的原码,反码,补码一样 ,如下图
-3(补码11111101)+4(补码00000100)=00000001=1,计算结果正确
总结:计算机中的数据存储与计算都是以补码的形式进行的,正数的原码,反码,补码一样;负数的反码为在原码基础上,保持符号位不变,数值取反;负数的补码为反码+1。
补充:
-127:原码(11111111) 反码(10000000)补码10000001
-128:原码无,反码无,补码10000000
由于计算机计算都是补码计算,故一个字节(8个bit位)的取值范围为(-128~127)