机器数的表示及运算
机器数为符号数值变化的数
0 表示 “+” ; 1 表示“-”
+00 1010 B 十进制表示为 +21 计算机中表示为: 0001 0101 B
-00 1010 B 十进制表示为 -21 计算机中表示为: 100 1010 B
由“ + ”、“ - ” 表示正负的数称之为机器数的真值(+ 00 1010 B, -001 0101 B)
由“ 0 ” 、“ 1 ”表示正负的数称之为机器数 (000 1010 B,1001 0101 B)
机器数: 符号位 + 真值
机器数的三种表示方法:原码、反码、补码
原码
原码:最高位表示符号,其余位为真值 (0 为正,1 为负)
真值x得到原码记为[x]原 ,[x]原 = 符号位+|x|y
例: 1、 [+5]原 = 0101 B [-5]原 = 1101 B
2、 X = -101 B ; y = 1101 B 求[x]原 [y]原 :[x]原 =1101 B ; [y]原 = 01100 B
注: 在源码表示中无论正负,数值部分保持真值不变
原码中0有两种表示形式: +0 , -0 (八位):
[+0]原 =0000 0000 B
[-0]原 = 1000 0000 B
反码
反码: 正数反码与原码相同;负数反码部分为真值的各位按位取反
真值x的反码记为:[x]反 ,最高位为符号位(0为正,1为负)
例:1、 [+5]原 = 0101 B ; [+5]反 = 0101 B
[-5]原 = 1101 B ;[-5]反 = 1010 B
2、 x = -0 ; y = +0 求[x]反;[y]反
[x]原 = 1000 0000 B ; [x]反 = 1000 0000 B
[y]原 = 0000 0000 B ; [y]反 = 1111 1111 B
补码
补码:正数与原码相同, 负数数值部分为真值的各位按位取反再加1
真值x的补码记为[x]补 ,最高位为符号为(0为正,1为负)
例:1、 [+5]原 = 0101 B ; [+5]反 = 0101 B ; [+5]补 = 0110 b
[-5]原 = 1101 B ;[-5]反 = 1010 B ; [-5] 补 = 1011 B
2、 x = -0 ; y = +0 求[x]补;[y]补
[x]原 = 1000 0000 B ; [x]反 = 1000 0000 B ; [x]补 = 0000 0000 B
[y]原 = 0000 0000 B ; [y]反 = 1111 1111 B ;[y]补 = 1111 1111 B
机器数补码最稳定
例 -5 + 8 = 3
[-5]原 = 10101 B ; [8]原 = 01000 B
[-5]原 +[8]原 = 1101 B -13 (提出反码)
[-5]反 = 11010 B ; [8]反 = 01000 B
[-5]反 + [8]反 = 00010 B +2 (提出补码)
[-5]补 = 11010 B ; [8]补 = 01001 B
[-5]补 + [8]补 = 00011 B +3 (补码最稳定)
八位二进制数表示则[x] 原(反、补) = 符号位 + 真值 = 八位;如果没说八位则符号位+ 真值
正数的原码、反码、补码相同
练习
1、 写出1与-1的原码、反码、补码
[1]原 = 0000 0001 B [-1] = 1000 0001 B
[1]反 = 0000 0001 B [-1] = 1111 1110 B
[1]补 = 0000 0001 B [-1] = 1111 1111 B
2、 十进制数-13的八位二进制补码是 1111 0011 B
有符号数的范围
8位机器数 | 16位机器数 | |
---|---|---|
最大 | 0111 111 B | 0111 1111 1111 1111 B |
最小 | 1111 1111 B | 1111 1111 1111 1111 B |
范围 | [-127,127] | [-32767,32767] |
原码范围 | [-127,127] | [-32767,32767] |
反码范围 | [-127,127] | [-32767,32767] |
补码范围 | [-128,127] | [-32768,32767] |
无符号数范围
8位二进制 | 16位二进制 | |
---|---|---|
最大 | 1111 1111 B | 1111 1111 1111 1111 B |
最小 | 0000 0000 B | 0000 0000 0000 0000 B |
范围 | 0 ~255 | 0~ 65535 |
练习
1、 补码表示中8位有符号数表示范围**[-128 ,127]**
2、 十进制数-126 的八位二进制补码为 1000 0010 B
3、 计算机中有符号数最常用的表示方法是 反码
[y]补 →[-y]补 : 各位取反(包括符号位),末位加1
例: [1]补 = 0000 0001 B 写出-1 的补码 : [-1]补 = 1111 1111 B
给定反码、补码 求真值
补码: 0100 1010 B (正数) 1111 1010 B (负数)
反码: 0100 1010 B 1111 1001 B
原码: 0100 1010 B 1000 0110
真值; 74 -6
有符号的运算y
[x]原 + [y]原 = [x]补 + [y]补
[x]原 - [y]原 = [x]补- [y]补
例: 1、 已知A =+01011 B ; B = + 00001 B 求A+ B
[A]原 = 0000 1011 B ; [B]原 = 0000 0001 B
[A]补 = 0000 1011 B ; [B]补 = 0000 0001
[A]补 + [B]补 = 0000 1100 B
2、 计算 18-6
[18]原 = 0001 0010 B ; [18]补 = 0001 0010 B
[-6]原 = 1000 0110 B ; [-6]补 = 1111 1010 B
[18]补 + [-6]补 = 0000 1100 B 十进制为12
GitHub Discussions