本文讨论了原码,反码与补码相关的基础知识:对于一个数, 计算机要使用一定的编码方式进行存储. 原码, 反码, 补码是机器存储一个具体数字的编码方式.
机器数:一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1.
例:十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011 。
真值:将带符号位的机器数对应的真正数值称为机器数的真值。
例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1
原码:原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值.
例:8位二进制:取值范围 [1111 1111 , 0111 1111],(-127,127);
[+1]原 = 0000 0001
[-1]原 = 1000 0001
反码:正数的反码是其本身,负数的反码是在其原码的基础上, 符号位不变,其余各个位取反;反码表示的是负数, 无法直观的看出来它的数值. 需要将其转换成原码再计算;
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
补码:正数的补码是其本身,负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1),通常也需要转换成原码再手动计算其数值;
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
[1000 0000] 表示-128
应用:
更加深入,请阅读参考博客,本博客不进行重复总结了;
保持更新,转载请注明出处;更多内容请关注cnblogs.com/xuyaowen;
参考博客:
原码, 反码, 补码 详解 (比较好的文章讲解)