1.无符号数与有符号数
计算机中存储与参与运算的数分为有符号数与无符号数。这些数存放在寄存器中,通常称寄存器的位数为机器字长。
当存放有符号的数时,就需要留出一位来存放符号,规定在符号位“0”表示“+”号,“1”表示“-”号。
以机器字长为16位为例,若其表示无符号数,可以表示范围为0~65535,而表示有符号数,由于需要拿出一位来存放符号,因此所表示数的范围为-32768~+32767。
2.定点数与浮点数
小数点固定在某一位置的数为定点数,小数点位置可以浮动的数为浮点数,这里说的小数点实际上为抽象的人为规定,并不实际存在于机器中。当小数点位于数符和第一数值位之间时,机器内的数为纯小数;当小数点位于数值位之后时,机器内的数为纯整数。采用定点数的机器为定点机,在定点机中,由于小数点的位置固定不变,故当机器处理的数不是纯小数或者纯整数时,必须乘上一个比例因子,否则会产生“溢出”。浮点数的表示类似于数学上的科学计数法,如 :
小数点的位置是可以变化的,但是因为乘上了不同的10的方幂,所以值不变。通常情况下,浮点数可以表示成:
其中,S为尾数(可正可负),j为阶码(可正可负),r为基数(或基值),计算机中,基数可取2,4,8,16等。
以基数r=2为例,数N可以写成下列不同的形式:
3.原码、反码、补码、移码
1.原码
是最简单的机器数表示法。用最高位表示符号位,‘1’表示负号,‘0’表示正号。其他位存放该数的二进制的绝对值。
1010:最高位为“1”,表示这是一个负数,其他三位为“010”,即
,所以1010表示十进制数(-2)。下图给出部份正负数数的二进制原码表示法:
正数 | 负数 | |||
0 | 0000 | -0 | 1000 | |
1 | 0001 | -1 | 1001 | |
2 | 0010 | -2 | 1010 | |
3 | 0011 | -3 | 1011 | |
4 | 0100 | -4 | 1100 | |
5 | 0101 | -5 | 1101 | |
6 | 0110 | -6 | 1110 | |
7 | 0111 | -7 | 1111 |
计算:
0001+0010=0011 (1 + 2 = 3)
0000+1000=1000 (0 - 0 = 0)
0001+1001=1010 (1 - 1 = -2)
这里我们可以看出,原码在计算一个数加上他的相反数时,出了问题。
2.反码
正数的反码是他本身,负数的原码是原码符号位不变,其他位按位取反。
正数 | 负数 | |||
0 | 0000 | -0 | 1111 | |
1 | 0001 | -1 | 1110 | |
2 | 0010 | -2 | 1101 | |
3 | 0011 | -3 | 1100 | |
4 | 0100 | -4 | 1011 | |
5 | 0101 | -5 | 1010 | |
6 | 0110 | -6 | 1001 | |
7 | 0111 | -7 | 1000 |
计算:
0001+1110=1111 (1 + (- 1) = - 0) (此处可以看到相反数相加的问题解决了)
1110+1101=1011 (-1 + (-2) = - 4)
1101+1100=1001 (-2 + (-3) = - 6)
这里可以看出,利用反码进行绝对值的运算时可以得到0,但是进行两个负数相加时,结果出错,并且比正确值小1。
3.补码
补码在反码的基础上末位加一,即对原码符号位不变,其他位按位取反,最后在末位加一。
补码的原理来自于“模”,例如,时钟指示6点,欲使他指示3点,既可以按顺时针转9圈,也可以按逆时针转3圈,结果是一致的,由于时钟一圈能指示12个小时,数学上称12为模,称+9是-3以12为模的补数。因此只要确定了“模”,就可以找到一个与负数等价的正数来代替此负数,这样就可以把减法运算用加法运算来实现。
正数 | 负数 | |||
0 | 0000 | |||
1 | 0001 | -1 | 1111 | |
2 | 0010 | -2 | 1110 | |
3 | 0011 | -3 | 1101 | |
4 | 0100 | -4 | 1100 | |
5 | 0101 | -5 | 1011 | |
6 | 0110 | -6 | 1010 | |
7 | 0111 | -7 | 1001 | |
-8 | 1000 |
计算:
0001+1111=0000 (1 + (-1) = 0)
1111+1110=1101 (-1 + (-2) = -3)(正确)
4.移码
移码(又叫增码)是符号位取反的补码,一般用指数的移码减去1来做浮点数的阶码,引入的目的是为了保证浮点数的机器零为全0。
4.IEEE 754标准
按IEEE 754标准,常用的浮点数有三种:
符号位S | 阶码 | 尾数 | 总位数 | |
短实数 | 1 | 8 | 23 | 32 |
长实数 | 1 | 11 | 52 | 64 |
临时实数 | 1 | 15 | 64 | 80 |
阶码用移码表示,阶码的真值都被加上一个常数(偏移量),如短实数、长实数和临时实数的偏移量用十六进制数表示分别为7FH、3FFH和3FFFH。尾数部分通常都是规格化表示,即非“0”的有效位最高位总是“1”,但在IEEE标准中,有效位呈如下形式:
1△ffff...fff (△为假想的二进制小数点)。
来源:CSDN
作者:_GMX
链接:https://blog.csdn.net/qq_37074103/article/details/103995006