计算机原理中最大负数和最小负数的区别,计算机组成原理—二进制

计算机原理中最大负数和最小负数的区别,计算机组成原理—二进制本文介绍了二进制的基本概念 区分了无符号数和有符号数的区别 重点讲解了有符号数的原码 反码和补码表示 并解析了为何 128 用表示

大家好,欢迎来到IT知识分享网。

一、二进制概念

基于计算机内部组成原理,在内存中字节是可寻址的最小单位,每个1字节由8个0或1的二进制位组成(有时二进制位也称为比特,英文bit),最左边的二进制位称为最高位,最右边的二进制位称为最低位。如下图。

5e543ad36e6af98c92eb345003b8bd0e.png

了解上面一些概念之后,咋们来讨论一个问题。

1个字节最大的表示范围是多少?要回答这个问题需要引入两个概念分别是无符号数和有符号数。

二、无符号数

无符号数很简单了,全部二进制位均代表数值位,没有符号位,数值范围全都是正数没有负数。1个字节无符号数范围:00000000(0255)总共有256个数值。

0073051da281db63a52a3077c2922361.png

三、有符号数

有符号数是针对二进制来讲的。用最高位作为符号位,“0”代表“+”,“1”代表“-” ;其余数位用作数值位,代表数值。如下图。

b8d1a1e7ad6b681892b403f10c9472ab.png

上面的0101 0101表示十进制的数值是多少呢?

二进制转换十进制。我们从右往左总共n-1位,用二进制位的每个数乘以2 n − 1 2^{n-1}2n−1次方累加起来。(注意符号位不是数值不能累加)整个算式如下。

1 × 2 6 + 0 × 2 5 + 1 × 2 4 + 0 × 2 3 + 1 × 2 2 + 0 × 2 1 + 1 × 2 0 = 85 1\times2^6+0\times2^5+1\times2^4+0\times2^3+1\times2^2+0\times2^1+1\times2^0=851×26+0×25+1×24+0×23+1×22+0×21+1×20=85

为了方便我们人阅读二进制,我用引入一个原码的概念来表示二进制中的正负数。上面85和-85的数值表示如下

数值

二进制

85

0101 0101

-85

1101 0101

弄明白了原码之后,我们就要在计算机进行运算,先弄个最简单的相加运算。我们希望(+85)和(-85)相加是0,用二进制表示就是

0101 0101

+ 1101 0101

————-

0010 1010

0010 1010实际上是(41),这不是我们期望的结果。

3.1、为了解决“正负相加等于0”的问题,在“原码”的基础上,人们又引入反码的概念。

“反码”表示方式用来处理负数的反码,符号位置不变,其余位置相反

例如原码1101 0101,反码就是1010 1010。再进行一次相加运算。

0101 0101

+ 1010 1010

——————

1111 1111

刚好反码1111 1111就是(-0)。看到这里还有个问题,我们的现实世界中,0是没有正负数之分的。

2.为了解决计算机中+0和-0的问题。人们又引入补码的概念。

“补码”表示,正数的补码其二进制本身。负数的补码在反码的基础上+1。

因此1111 1111+1变成了1 0000 0000,去掉高位就是0000 0000。这样就解决了+0和-0同时存在的问题

小结

数值

原码

反码

补码

85

0101 0101

0101 0101

0101 0101

-85

1101 0101

1010 1010

1010 1011

1.正数(无符号数)其原码、反码、补码相同

2.经过上面几个概念之后,要记住一点,在计算机系统中,数值一律用补码来表示和存储,并且1个字节最多能表示2 8 2^828也就是256个数值。

3.一个字节无符号数范围:00000000(0255)总共有256个数值。

4.一个字节二进制位有符号数表示范围:1000 0000~0111 1111(即-128~127)。

这里有两个疑问

1、为什么最小负数是-128而不是-127?

正数的最大值应该是 0111 1111 127 (补码:再次提示计算机的数据都是以补码形式)

0111 1110 126

0111 1101 125

0000 0001 1

0000 0000 0 (为了方便理解 我把0看成正数)

由上可知补码从0000 0000 到 0111 1111 中存在128个数字

负数从大到小最大值是-1对应的

原码 1000 0001

反码 1111 1110

补码 1111 1111

补码从大到小顺序排列如

-1 1111 1111

-2 1111 1110

-3 1111 1101

-127 1000 0001

-128 1000 0000

正数和0一共128个 负数128个 刚好满足2 8 2^828=256个数

具体补码表示如下图

+—————————-+

| 255 -1 |

| 254 -2 |

| 253 -3 |

| 252 -4 |

| 251 -5 |

| 246 -10 |

| 236 -20 |

| 226 -30 |

| 216 -40 |

| 206 -50 |

| 196 -60 |

| 186 -70 |

| 156 -100 |

| 129 -127 |

| 128 -128 |

| 127 127 0 |

| 100 100 0 |

| 70 70 0 |

| 60 60 00 |

| 50 50 00 |

| 40 40 00 |

| 30 30 00011110 |

| 20 20 00010100 |

| 10 10 00001010 |

| 5 5 00000101 |

| 4 4 00000100 |

| 3 3 00000011 |

| 2 2 00000010 |

| 1 1 00000001 |

| 0 0 00000000 |

+—————————-+

2、为什么补码1000 0000表示-128

要解释这个问题,先思考-128的原码怎么表示(先不要纠结一个字节等于8比特)是不是11000 0000,最左边的1是符号位表示负数,总共用9个比特来表示-128。

我们把11000 0000转成反码就是10111 1111。

再将10111 1111转成补码(即+1)就是11000 0000。这个时候考虑一个字节有8比特,11000 0000会导致数据溢出,因此计算机内部抹掉最高位1,用1000 0000表示-128。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/157803.html

(0)
上一篇 2025-01-28 14:45
下一篇 2025-01-28 15:00

相关推荐

发表回复

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

关注微信