数在机器中的表示有以下几种:原码、反码、补码。
原码、反码、补码的基本概念
字节:8个位。
字长:若干个字节。到底是几个字节?具体看是哪种CPU。比如2010普及组第11题就假设一个字长只有一个字节8个位。
原码、反码、补码都是建立在机器数在一个字长上的表示。为了方便理解,我们假设字长为一个字节。要注意事实上为32位CPU字长为4个字节,64位CPU字长为8个字节。
原码:首位为符号位,其余为真值。比如:
特点:简单。
范围:比如字长为8位,则范围为 11111111(-255)至 01111111(+255)。
缺点:0有两个表示,分别为正零(00000000)和负零(10000000),给计算机计算带来不便。
反码:首位为符号位,其它位分正数和负数两种情况。
反码正数:所有位和原码一样;
反码负数:除了符号位和原码一样,其他位相反。
比如:77的反码表示为01001101;-77的反码表示为10110010。
补码:分正数和负数两种情况。
补码正数:所有位和反码一样,当然也和原码一样。
补码负数:等于反码加1。简单的一句话,其实很麻烦。
比如:77的补码表示为01001101(和原码、反码一致);-77的补码表示为10110011。
加1之后会有进位,因为补码没有符号位,所以负零的补码表示也是00000000。
特点:表示比补码更麻烦。但是解决了一个问题:0只有一种表示。
补码加法:在计算机中,凡是带符号数一律用补码表示,运算结果自然也是补码。其运算特点是:符号位和数值位一起参加运算,并且自动获得结果(包括符号位与数值位)。
补码加法的运算规则为:
即:两数补码的和等于两数和的补码。
【例】已知 [+51]补=0011 0011,[+66]补=0100 0010,[-51]补=1100 1101;
求:[+66]补+[+51]补=?,[+66]补+[-51]补=?
【解】:
(1)由于 [+51]补=0011 0011,[+66]补=0100 0010,
故 [+66]补+[+51]补=[(+66)+(+55)]补=01110101
结果为正,因此
[(+66)+(+55)]原=[(+66)+(+55)]补=01110101
其真值为+117,计算结果正确。
(2)由于 [+66]补=0100 0010,[-51]补=1100 1101,
每日练习
1、无符号二进制数11001000所表示的十进制数为___________ 。
A .104 B. 148 C. 172 D . 200
2、有符号二进制数11001000所表示的十进制数为___________ 。
A . -200 B. -72 C. 72 D . 200
3、用16位和8位机器码分别写出十进制数+58和—58的原码、反码和补码。
4、若用8位机器码表示十进制数—101,则原码表示的形式为 (1) ;
补码表示的形式为(2) 。
(1)A.11100101 B.10011011 C.11010101 D.11100111
(2)A.11100101 B.10011011 C.11010101 D.11100111
5、已知一个字长为8的整数的原码是10011010,求它的补码。
6、已知一个字长为8的整数的补码是10011000,求它的原码。
历年真题
1、在字长为16位的系统环境下,一个16位带符号整数的二进制补码为1111111111101101。其对应的十进制整数应该是( )。
A.19 B.-19 C.18 D.-18
2、一个字长为8位的整数的补码是11111001,则它的原码是( )。
A.00000111 B.01111001 C.11111001 D.10000111
3、在整数的补码表示法中,以下说法正确的是( )。
A.只有负整数的编码最高位为1
B.在编码的位数确定后,所能表示的最小整数和最大整数的绝对值相同
C.整数0只有一个唯一的编码
D.两个用补码表示的数相加时,如果在最高位产生进位,则表示运算溢出
原码反码补码每日练习参考答案:
1.D 2.B
3.+58,16位原码:0000 0000 0011 1010
反码:0000 0000 0011 1010
补码:0000 0000 0011 1010
+58,8位原码:0011 1010 反码:0011 1010 补码:0011 1010
-58,16位原码:1000 0000 0011 1010
反码:1111 1111 1100 0101
补码:1111 1111 1100 0110
-58,8位原码:1011 1010 反码:1100 0101 补码:1100 0110
4.(1) A (2) B
5.1110 0110 6.1110 1000
原码反码补码历年真题参考答案:1.B 2.A 3.AC