不得不知道的补码知识

不得不知道的补码知识无论什么编程语言,其代码最终都会被编译解释成计算机可读取和运行的二进制数据。 其中,数字在二进制数据中可划分成原码、补码和反码。 表示法 原码:数值前面增了一位符号位 例如:10 和 -10 的二进制

原文地址:不得不知道的补码知识

无论什么编程语言,其代码最终都会被编译解释成计算机可读取和运行的二进制数据。

其中,数字在二进制数据中可划分成原码、补码和反码。

表示法

原码:数值前面增了一位符号位

例如:10 和 -10 的二进制表示如下:

# 10 的原码
0000 1010

# -10 的原码
1000 1010

其中,最高位表示符号位,0 表示正数,1 表示负数。

反码:在原码的基础上,符号位不变,其余位取反

继续以上边的 -10 为例:

# -10 的反码
1111 0101

补码:负数的补码为反码加1,正数的补码就是原码本身

# 10 的补码
0000 1010

# -10 的补码
1111 0110

在计算机中,数字是以补码的形式进行存储和运行的。

补码的意义

相对于原码,使用补码作为计算机的实际存储方式有 2 个优势:

  1. 可以统一数字 0 的表示。因为 0 既不是正数也不是负数,如果使用原码表示,最高位的符号为难以确定用 0 还是 1 表示。

如果用补码表示,我们先把 0 当作正数处理,其补码(原码本身)表示如下:

0000 0000

我们再把 0 当作负数表示,其补码(反码 + 1)表示如下:

# 原码
1000 0000

# 反码
1111 1111

# 补码
0000 0000

从上边可以看到,以补码表示 0,无论从正数还是负数角度处理,最终数字的二进制表示都是一样的。

  1. 简化加减法的计算。将减法当成加法进行计算,实现正数和负数加法的统一。

我们以 2 + 3 为例:

2 的补码: 0000 0010
3 的补码: 0000 0011
    结果: 0000 0101

结果中的 0000 0101 就是十进制的 5。

我们以 2 – 3 为例:

 2 的补码: 0000 0010
-3 的补码: 1111 1101
     结果: 1111 1111   

结果中的 1111 1111 就是十进制中的 -1。

从上边的例子中我们可知,使用补码表示数字时,我们无需区分正负数,只需将补码进行加法运行即可得出结果。

今天的文章不得不知道的补码知识分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/23175.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注