计算机组成原理 | 您所在的位置:网站首页 › 1111-1010二进制计算 › 计算机组成原理 |
一、二进制概念
基于计算机内部组成原理,在内存中字节是可寻址的最小单位,每个1字节由8个0或1的二进制位组成(有时二进制位也称为比特,英文bit),最左边的二进制位称为最高位,最右边的二进制位称为最低位。如下图。 无符号数很简单了,全部二进制位均代表数值位,没有符号位,数值范围全都是正数没有负数。1个字节无符号数范围:0000000011111111(0255)总共有256个数值。 有符号数是针对二进制来讲的。用最高位作为符号位,“0”代表“+”,“1”代表“-” ;其余数位用作数值位,代表数值。如下图。 为了方便我们人阅读二进制,我用引入一个原码的概念来表示二进制中的正负数。上面85和-85的数值表示如下 数值二进制850101 0101-851101 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同时存在的问题 小结 数值原码反码补码850101 01010101 01010101 0101-851101 01011010 10101010 10111.正数(无符号数)其原码、反码、补码相同 2.经过上面几个概念之后,要记住一点,在计算机系统中,数值一律用补码来表示和存储,并且1个字节最多能表示 2 8 2^8 28也就是256个数值。 3.一个字节无符号数范围:0000000011111111(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^8 28=256个数 具体补码表示如下图 +----------------------------+ | 255 -1 11111111 | | 254 -2 11111110 | | 253 -3 11111101 | | 252 -4 11111100 | | 251 -5 11111011 | | 246 -10 11110110 | | 236 -20 11101100 | | 226 -30 11100010 | | 216 -40 11011000 | | 206 -50 11001110 | | 196 -60 11000100 | | 186 -70 10111010 | | 156 -100 10011100 | | 129 -127 10000001 | | 128 -128 10000000 | | 127 127 01111111 | | 100 100 01100100 | | 70 70 01000110 | | 60 60 00111100 | | 50 50 00110010 | | 40 40 00101000 | | 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。 |
CopyRight 2018-2019 实验室设备网 版权所有 |