为什么计算机中的负数要用补码表示?

简介: 为什么计算机中的负数要用补码表示
  1. 为什么计算机要使用二进制数制?

所谓数制其实就是一种 “计数的进位方式”。

常见的数制有十进制、二进制、八进制和十六进制:

十进制是我们日常生活中最熟悉的进位方式,它一共有 0、1、2、3、4、5、6、7、8 和 9 十个符号。在计数的过程中,当某一位满 10 时,就需要向它临近的高位进一,即逢十进一;

二进制是程序员更熟悉的进位方式,也是随着计算机的诞生而发展起来的,它只有 0 和 1 两个符号。在计数的过程中,当某一位满 2 时,就需要向它临近的高位进一,即逢二进一;

八进制和十六进制同理。

那么,为什么计算机要使用二进制数制,而不是人类更熟悉的十进制呢?其原因在于二进制只有两种状态,制造只有 2 个稳定状态的电子元器件可以使用高低电位或有无脉冲区分,而相比于具备多个状态的电子元器件会更加稳定可靠。

2.有符号数与无符号数
在计算机中会区分有符号数和无符号数,无符号数不需要考虑符号,可以将数字编码中的每一位都用来存放数值。有符号数需要考虑正负性,然而计算机是无法识别符号的 “正+” 或 “负-” 标志的,那怎么办呢?

好在我们发现 “正 / 负” 是两种截然不同的状态,正好可以映射到计算机能够理解的 “0 / 1” 上。因此,我们可以直接 “将符号数字化”,将 “正+” 数字化为 “0”,将 “负-” 数字化为 “1”,并将数字化后的符号和数值共同组成数字编码。

另外,为了计算方便,我们额外再规定将 “符号位” 放在数字编码的 “最高位”。例如,+1110 和 -1110 用 8 位二进制表示就是:

0000, 1110(符号作为编码的一部分,最高位 0 表示正数)
1000, 1110(符号作为编码的一部分,最高位 1 表示负数)
从中我们也可以看出无符号数和有符号数的区别:

1、最高位功能不同: 无符号数的编码中的每一位都可以用来存放数值信息,而有符号数需要在编码的最高位留出一位符号位;

2、数值范围不同: 相同位数下有符号数和无符号数表示的数值范围不同。以 16 位数为例,无符号数可以表示 0~65536,而有符号数可以表示 -32768~32768。

提示: 无符号数和有符号数表示的数值范围大小是一样大的,n 位二进制最多只能表示 $2^n$ 个信息量,这是无法被突破的。

目录
相关文章
|
算法
【计算机组成原理】(四)原码补码的加减乘除
各种码的作用: 模运算的性质:
205 0
|
1月前
|
存储
计算机中补码的意义
补码在计算机中用于表示有符号数,解决了符号位参与运算的问题,简化了硬件设计,同时能够表示更多的数值,提高了计算效率和精度。
60 12
|
1月前
|
存储 C语言
计算机是怎么存储整数的,原码、反码、补码又是个啥?
计算机是怎么存储整数的,原码、反码、补码又是个啥?
114 4
|
5月前
计算机中的数字表示:正码、反码和补码
计算机中的数字表示:正码、反码和补码
241 3
|
11月前
【408计算机组成原理】—原码、反码、补码、移码(六)
【408计算机组成原理】—原码、反码、补码、移码(六)
|
机器学习/深度学习 存储
数据的表示:原码、反码、补码、移码以及浮点数的运算
数据的表示:原码、反码、补码、移码以及浮点数的运算
477 0
数据的表示:原码、反码、补码、移码以及浮点数的运算
原码、反码、补码的互换
计算机中国的有符号数(整数)有三种表达方式,即原码、反码、补码。
为什么计算机要用补码的方式来表示负数?
在回答这个问题前,我们假设不用补码的方式来表示负数,而只是把最高位的符号标志位变为 1 表示负数,
134 0
为什么计算机要用补码的方式来表示负数?
|
存储
数制间的转换,原码、反码、补码
数制间的转换,原码、反码、补码
774 0
数制间的转换,原码、反码、补码
【计算机组成原理】原码 反码 补码 移码
一、原码、反码、补码、移码的概念 1. 真值 2. 机器数 1. 原码 2. 反码 3. 补码 4. 移码 二、原码、反码、补码、移码的转换 1. 原码转反码 2. 原码转补码 3. 原码转移码 三、总结
668 0
【计算机组成原理】原码 反码 补码 移码