计算机基础——码制表示

前言:我们知道,计算机最底层是以二进制组织和存储数据的,一个字节当中,最高位是表示符号位,1表示负数,0表示整数,其余的七个位则是真正的数值。例如 十进制 -18 转换成二进制就是 10010010.
原码:原码就是十进制转换成二进制后的机器码,如[-18]原码 = 10010010,[+18]原码 = 00010010.
反码:整数的反码就是原码本身,负数的反码就是除了符号位的其他位取反,如[-18]原码 = 10010010,[-18]反码 = 11101101.
补码:正数的补码就是原码本身,负数的补码是在其反码的基础上再加1,如[-18]原码 = 10010010 , [-18]反码 = 11101101,[-18]补码 = 11101110. 还有一种根据原码快速取负数补码的方法,从右往左看,当遇到第一个1,这个1不用变,后面除了符号位之外的位全部取反就可以。
为什么会有反码和补码呢?
因为在计算机计算中,减去一个整数就相当于加上一个负数,这样的话就可以只用设计加法的计算了。如:[+18]原码 +[-18]原码 =[+18]反码+[-18]反码 = [00010010]反码 + [11101101]反码 = [11111111 ]反码 = [10000000]原码 = -0. 这里就出现了一个问题,-0 和+0 都是表示的0,但是他们的编码却是不同的。于是补码出现了,成功解决了这一问题,[+18] + [-18] = [00010010]补码 + [11101110]补码 = [00000000]补码 = [00000000]原码,这样用补码表示0就是唯一的了,同时还可以用[10000000]补码来表示-128,但是要注意的是,-128在原码和反码中都没有表示的。
因此我们可以发现,一个字节中,原码的表示范围是[-127,-0,+0,+127],反码的范围是[-127,-0,+0,+127],补码的范围是[-128,0,127]。

猜你喜欢

转载自blog.csdn.net/yus201120/article/details/76012926
今日推荐