计算机系统基础知识2-码制

本文详细介绍了机器数中的无符号数和带符号数概念,以及原码、反码、补码和移码的定义、计算方式和示例,展示了不同编码方法在表示正负数时的特点和应用场景。
摘要由CSDN通过智能技术生成

机器数有无符号数带符号数,无符号数表示正数, 在机器数中没有符号位.
对于无符号数, 若约定小数点的位置在机器数的最低位之后, 则是纯整数, 若小数点的位置在机器数的最高位之前, 则是纯小数.
对于
带符号数
, 机器数的最高位是表示正、负的符号位, 其余表示数值
为了便于运算, 带符号的机器数采用原码, 反码和补码等不同的编码方法, 机器数的这些编码方法成为码制。

原码, 反码, 补码

原码表示法

数值X的原码记为[X]原, 如果机器字长为n(即采用n个二进制表示数据), 则原码定位如下:

1. 若X为纯整数, 则

[ X ] 原 = { X , 0 ≤ X ≤ 2 n − 1 − 1 2 n − 1 + ∣ X ∣ , - ( 2 n − 1 − 1 ) ≤ X ≤ 0 [X]_原 = \begin{cases} X, & \text 0\le X \le 2^{n-1}-1 \\ 2^n -1 +|X|, & \text -(2^{n-1} -1) \le X \le 0 \\ \end{cases} [X]={X,2n1+X,0X2n11-(2n11)X0

2. 若X为纯小数, 则

[ X ] 原 = { X , 0 ≤ X < 1 2 0 + ∣ X ∣ , - 1 < X ≤ 0 [X]_原 = \begin{cases} X, & \text 0\le X < 1 \\ 2^0 +|X|, & \text -1 < X \le0 \\ \end{cases} [X]={X,20+X,0X<1-1<X0

若机器字长为n等于8,

[ + 1 ] 原 = 00000001 [ − 1 ] 原 = 10000001 [+1]_原 = 00000001 \qquad [-1]_原=10000001 \\ [+1]=00000001[1]=10000001
[ + 127 ] 原 = 01111111 [ − 127 ] 原 = 11111111 [+127]_原 = 01111111 \qquad [-127]_原=11111111 \\ [+127]=01111111[127]=11111111
在原码表示法中, 最高位为符号位, 0表示正号, 1表示负号, 其余n-1位表示数值的绝对值, 数值0的原码为
‘ [ + 0 ] 原 = 00000000 ‘ , [ − 0 ] 原 = 10000000 `[+0]_原= 00000000`, [-0]_原= 10000000 [+0]=00000000‘,[0]=10000000

反码表示法

数值X的反码记作[X]反, 若机器字长为n, 则:
X为纯整数时
[ X ] 反 = { X , 0 ≤ X < 2 n − 1 − 1 2 n − 1 + X , - ( 2 n − 1 − 1 ) ≤ X ≤ 0 [X]_反 = \begin{cases} X, & \text 0\le X < 2^{n-1}-1 \\ 2^n-1 + X, & \text -(2^{n-1}-1) \le X \le 0 \\ \end{cases} [X]={X,2n1+X,0X<2n11-(2n11)X0
X为纯小数时
[ X ] 反 = { X , 0 ≤ X < 1 2 − 2 − ( n − 1 ) + X , - 1 < X ≤ 0 [X]_反 = \begin{cases} X, & \text 0\le X \lt 1 \\ 2-2^{-(n-1)}+X, & \text -1 \lt X \le0 \\ \end{cases} [X]={X,22(n1)+X,0X<1-1<X0

[ + 1 ] 反 = 00000001 [ − 1 ] 反 = 11111110 [+1]_反 = 00000001 \qquad [-1]_反=11111110 \\ [+1]=00000001[1]=11111110
[ + 127 ] 反 = 01111111 [ − 127 ] 反 = 10000000 [+127]_反 = 01111111 \qquad [-127]_反=10000000 \\ [+127]=01111111[127]=10000000
在反码表示中, 最高位是符号位, 0表示正号, 1表示负号, 正数的反码与原码相同, 负数的反码则是其绝对值按位取反
数值0的反码有两种形式: [ + 0 ] 反 ∗ ∗ = ∗ ∗ 00000000 , [ − 0 ] 反 ∗ ∗ = ∗ ∗ 11111111 [+0]反** = **00000000, [-0]反** = **11111111 [+0]=00000000,[0]=11111111

补码表示法

数值X的补码记作[X]补, 如果机器字长为n, 则
X是纯整数
[ X ] 补 = { X , 0 ≤ X ≤ 2 n − 1 − 1 2 n + X , - 2 n − 1 ≤ X ≤ 0 [X]_补 = \begin{cases} X, & \text 0\le X \le 2^{n-1}-1 \\ 2^n+X, & \text -2^{n-1} \le X \le0 \\ \end{cases} [X]={X,2n+X,0X2n11-2n1X0
X是纯小数

[ X ] 补 = { X , 0 ≤ X < 1 2 + X , - 1 ≤ X < 0 [X]_补 = \begin{cases} X, & \text 0\le X \lt 1 \\ 2+X, & \text -1 \le X \lt0 \\ \end{cases} [X]={X,2+X,0X<1-1X<0
示例:

[ + 1 ] 补 = 00000001 [ − 1 ] 补 = 11111111 [+1]_补 = 00000001 \qquad [-1]_补=11111111 \\ [+1]=00000001[1]=11111111
[ + 127 ] 补 = 01111111 [ − 127 ] 补 = 10000001 [+127]_补 = 01111111 \qquad [-127]_补=10000001 \\ [+127]=01111111[127]=10000001
正数的补码与其原码和反码相同, 负数的补码则等于其反码的末位加1

移码表示法

移码表示法是在数X上增加一个偏移量来定义的, 常用于表示浮点中的阶码, 如果机器字长为n, 规定偏移量为2n-1

[ X ] 移 = 2 n − 1 + X ( − 2 n − 1 ≤ X < 2 n − 1 ) [X]_移 = 2^{n-1} + X(-2^{n-1} \le X \lt 2^{n-1}) \\ [X]=2n1+X(2n1X<2n1)

[ + 1 ] 移 = 10000001 [ − 1 ] 移 = 01111111 [+1]_移 = 10000001 \qquad [-1]_移=01111111 \\ [+1]=10000001[1]=01111111
[ + 127 ] 移 = 11111111 [ − 127 ] 移 = 00000001 [+127]_移 = 11111111 \qquad [-127]_移=00000001 \\ [+127]=11111111[127]=00000001

  • 22
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

spoiledcat

过程曲折,希望得到认可

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值