对于有符号数:原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值。
例如:5
原码的二进制:0000 0101
例如:-5
原码的二进制:1000 0101
对于无符号数:原码就是真值。
例如:5 源码的二进制:0000 0101
在计算机中,可以区分正负的类型,称为有符类型,无正负的类型(只有正值),称为无符类型;所以无符号数无法表示负数
正数的反码:是其本身
例如:5
原码:0000 0101
反码:0000 0101
负数的反码:在其原码的基础上, 符号位不变,其余各个位取反.
例如:-5
原码:1000 0101
反码:1111 1010
正数的补码:是其本身
例如:5
原码:0000 0101
反码:0000 0101
补码:0000 0101
负数的补码:在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
例如:-5
原码:1000 0101
反码:1111 1010
补码:=反码+1=1111 1010 +1 =1111 1011=251
例如:-1
原码:1000 0001
反码:1111 11110
补码:1111 11111 =255
正数:补码与原码相等 所以无需转换
负数补码转源码:在补码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
补码:1111 1101
反码:1000 0010
原码:1000 0011=-3
计算机通常用补码来表示有符号数,计算机的一个数据可以看作是有符号数,也可以看作无符号数的,也就是说计算机并不知道你存的是有符号数还是无符号数,而且所做的运算并不需要管你存的是什么数
1、原码计算加减法:加法正确 ,但是减法的结果错误
2、反码计算加减法:加法与减法结果都是正确的
3、使用补码计算加减法:加法与减法结果都是正确的,并且解决了-0 的问题
使用java语言证明:由于正数的原码与补码相同,所以这里我们使用负数证明 byte b=-3;
由结果可知JAVA代码右位移1位的结果与我们使用补码计算的结果一致
联系客服