计算机擅长做加法运算,对于减法运算也是以加法的形式存在。比如,12-8,计算机会表达成12+(-8),那么问题就来了,(-8)是如何标示的在计算机中?
原码、反码和补码的概念
首先要明白几个概念:
原码:比如12的原码(在八位机中)是,0000 1100,(-8)的原码是,1000 1000,其中首位是符号位,0代表正数,首位1代表的是负数。
反码:正数的反码就是它本身;负数的反码是保留符号位,其他位取反。(-8)的反码就是1111 0111。
补码:补码就是在反码的基础上加1。(-8)的补码是,1111 1000.
计算机为了计算容易便把(-8)以补码的方式存储,1111 1000.
举例1:12+(-8)= 4;
0000 1100 + 1111 1000 = 0000 0100 ,又符号位是0是正数,则正数的补码和原码一致,即4
举例2: 4+(-8)= -4;
0000 0100 + 1111 1000 = 1111 1100 ,又符号位是1是负数,则负数要转化为原码才是真正的数值。注意这里补码转原码的步骤是和原码转补码是一样的。即符号位不变,其余位取反然后加1.
1111 1100的原码即 1000 0100 ,(-4).
数据存储范围
对于一个8位机,无符号数范围是 0~255;有符号数的范围是 -128~127。
127,即 0111 1111;
-128,即 1000 0000; 注意由于是有符号数,所以这里的127和-128均是以补码的形式存在。