补码

我们都知道在计算机里面,都是用补码来表示数字的,那究竟什么是补码,为什么要使用补码呢?

什么是补码?

介绍补码以前,需要先介绍 原码 和 反码。

原码

简单的来说就是最高位是符号位的二进制数

以8位二进制为例,最高位是符号位,其余就是用2进制来表示10禁止了

[+1]原 = 0000 0001
[-1]原 = 1000 0001

反码

正数的反码是其本身

负数的反码是, 符号位不变,其余各个位取反.

[+1] = [0000 0001]原 = [0000 0001]反
[-1] = [1000 0001]原 = [1111 1110]反

补码

正数的补码就是其本身

负数的补码是其反码+1

[+1] = [0000 0001]原 = [0000 0001]反 = [0000 0001]补
[-1] = [1000 0001]原 = [1111 1110]反 = [1111 1111]补

为什么要用补码?

因为对于计算机来说,它只有加法,但是没有 减 乘 除。

就是说减乘除都是通过加法模拟的。

引入补码后,计算机就可以轻易算法 (-1) + 1 = 0 了

[+1] = [0000 0001]补
[-1] = [1111 1111]补
+1 -1 = [0000 0001] + [1111 1111] = [1 0000 0000]
// 最高位溢出,忽略, 最终得到 [0000 0000]

+0 和 -0 的问题

在引入补码以前,0 有 2 种表示方式:

[+0] = [0000 0000]
[-0] = [1000 0000]

引入补码后,我们就解决了这个问题。

0 只有 [0000 0000] 这种表示方式:

0 = 1 + (-1)  = [0000 0001]补 + [1111 1111]补 = [0000 0000]补

而 [1000 0000] 用于表示 -128:

-128 = (-1) + (-127) = [1111 1111]补 + [1000 0001]补 = [1000 0000]补

小结:引入补码后,我们把 -0 让给了 -128,可表示的范围从 [-127, 127] 扩充到 [-128, 127]。

 

posted @ 2019-09-07 05:22  张啊咩  阅读(459)  评论(0编辑  收藏  举报