源码
在计算机中,数据以二进制的形式存放。所谓二进制,即0与1,逢2进1。同十进制的逢10进1一个道理。
以byte类型为例:15的二进制存放形式为
0 000 1111。表示1*2^3+1*2^2+1*2^1+1*2^0=15。其中最高位为符号位,正数符号位为0,负数符号位为1。byte类型所能表示的范围即-2^7~2^7-1,即-128~127。
采用这种编码方式,与计算机而言,进行基本的算术运算都很困难。如以1+(-1)=00000001+1000 0001=1000 0010=-2。为了解决这一问题,反码诞生。
反码
正数的反码是它的源码,负数的反码是在源码的基础上除符号位外,其余每位按位取反。例如以-15表示:-15=10001111_源码=11110000_反码。这样一来:1+ -1=00000001+11111110=11111111_反码=10000000_源码=0。这样一来,一个新的问题诞生了:0的表示方式有两种00000000与10000000。为了解决这一问题,补码诞生。
补码
正数的补码是它的源码,负数的补码是在其反码的基础上加1得到。如此一来:1+ -1=00000001+11111111_补码=00000000_补码=00000000_源码。这一,0的编码方式就只有这一种,故表示范围为-128~127。
这里,需要注意的是将补码转换为源码的过程为:按位取反,再加1。
未完待续
网友评论