对于有符号数:原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其他位表示值。java
例如:5blog
原码的二进制:0000 0101源码
例如:-5基础
原码的二进制:1000 0101二进制
对于无符号数:原码就是真值。im
例如:5 源码的二进制:0000 0101d3
在计算机中,能够区分正负的类型,称为有符类型,无正负的类型(只有正值),称为无符类型;因此无符号数没法表示负数数据
正数的反码:是其自己db
例如:5img
原码: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
计算机一般用补码来表示有符号数,计算机的一个数据能够看做是有符号数,也能够看做无符号数的,也就是说计算机并不知道你存的是有符号数仍是无符号数,并且所作的运算并不须要管你存的是什么数
一、原码计算加减法:加法正确 ,可是减法的结果错误
二、反码计算加减法:加法与减法结果都是正确的
三、使用补码计算加减法:加法与减法结果都是正确的,而且解决了-0 的问题
使用java语言证实:因为正数的原码与补码相同,因此这里咱们使用负数证实 byte b=-3;
由结果可知JAVA代码右位移1位的结果与咱们使用补码计算的结果一致