数据的表示和运算

数制与编码

进制间的转换

  1. 二进制、八进制、十进制、十六进制之间的转换不用多说。常见的比如一直除以2拿到余数,再将余数排列起来(从下至上倒着写回去),即除基取余法,对应的还有一个乘积取整法。但是这两种办法比较慢,所以大家肯定还是会用2的多少次方去凑。

image-20230223165814332

二进制、八进制、十进制、十六进制的后缀分别为B、O、D、H

  1. 十进制与任意进制进制之间转换有个公式,等号左边是r进制,右边是十进制。

image-20230223165535488

BCD码

BCD:Binary-Coded Decimal,用二进制编码的十进制。

image-20230226160659823

(5 封私信) BCD码有什么用? - 知乎 (zhihu.com)

典型的BCD码就是8421码

image-20230226154703718

为什么没有十的映射?

BCD码的定义是二进制编码的十进制,十进制里最大就是9,所以映射到9结束。

8421码中1010-10010没有定义。即10-18,那就把这个二进制加6修正,就可以得到正确的数字。如在0000-1001内,就不用修正。

如6+7

0110

0111

————相加

1101,把这个结果加上6(0110)

0110

————相加

10011,将结果补全为八位00010011,四位一取,就是13,而6+7的结果正是13.

这就是计算机计算8421码的方法

除了8421码外,还有余3码和2421码等,每一位对应的权值都不相同。

其中余3码=8421码+0011,是一种无权码,每一位没有对应的权值。

2421码的每一位权值分别四2、4、2、1,表示0-4时最高位为0.表示5-9时最高位为1

奇偶校验

image-20230226162006601

定点数与浮点数

机器数中小数点的位置是固定的吗_百度知道 (baidu.com)

简易讲解定点数与浮点数 - 简书 (jianshu.com)

参考了以上博客

定点数是什么?

小数点确定的数,或者说在这种表达方法中小数点的位置是确定的,那么我们称这种方法表示的数就可以是定点数。比如定点表示法。

image-20230223171003127

image-20230223171119338

浮点数是什么?

浮点数就是小数点不确定的,比如在后面浮点数的表示里有一个部分叫阶码,有些也叫位移数,使得小数点的位置不确定

为什么要有浮点数?

因为浮点数表示的精度更高

定点数与浮点数的区别

定点数小数点固定,浮点数不固定。

定点数的精度比浮点数更低。

机器数和真值

真值就是给人看的,机器数就是机器看的。一般是十进制,也可以是二进制

+3,-5,我们看的懂,就是真值

把数字经过编码后存入计算机的数就是机器数,如补码等。一般是二进制。

机器数和真值不过是一个数字的两种形式。

原码、反码、补码、移码

基本定义

原码反码补码移码
关系真值写成二进制原码符号位不变,按位取反反码+1真值的基础上加上一个偏置值再写成二进制

有符号整数分别表示的范围:

image-20230223205032506

  • 原码从右往左找到第一个1,然后让它前面的位除符号位外全部取反即可得到它的补码。
  • 一个数的补码从右往左找到第一个1,然后让它前面的位全部按位取反,就可以得到这个数的相反数的补码。(套这个公式前注意主语是补码,不是原码)

假设机器字长为8位,有符号整数补码1000 0000表示的就是-128,注意不是负零。

-128是一个比较特殊的数字,他不能用反码+1去推出补码,而是1 0000 0000-1000 000=1000 000

  • 原码和反码存在正零和负零,补码只有一个正零。
  • 移码由于偏置值确定存在,可以直接以无符号数的形式比较。且移码不能表示小数,只能表示整数

image-20230223195634362

  • image-20230226163846210

整数的加减法

特别注意,下面说的加减法指的都是补码的加减法,所以符号位能直接参与运算,但是原码的运算规则稍微有点不同。
image-20230226132932807

下面的是文字版:

整数的加减法可以分为两类,无符号整数的加减法和有符号整数的加减法

无符号整数的加减法,加法不用多说,减法需要转为加法。因为减去一个数,等于加上这个数的相反数。

被减数不变,减数全部位按位取反,末位加一(从右往左找到第一个1,然后第一个1前面的数全部取反),然后相加即可。

机器码设为8位,以5-3为例

  1. 写出两个数的原码

00000101

00000011–全部位按位取反再末位加一–>11111101

  1. 将两个数直接相加,多出的位舍弃

舍弃后得到00000010B,即2D。(D表示十进制)

而5-3确实等于2,说明我们算对了

有符号整数的加减法,加法不用多说,减法需要转为加法,即拿到减数的相反数的补码。

被减数不变,减数全部位按位取反,末位加一(从右往左找到第一个1,然后第一个1前面的数全部取反,包括符号位),然后相加即可。

有符号整数和无符号整数都是这个办法,说明可以用一套电路解决

补码的加法让符号位也可以参加运算,使得电路的设计更加简便。
image-20230226143543511

刷题小结

  • 65535=216-1,说明表示65535有16个1,无符号整数表示65535至少需要16位,有符号整数表示65535至少需要17位。
  • 1024=210,权值是从20开始,说明1024是第十一位,所以无符号整数表示1024至少需要11位,有符号整数表示1024至少需要12位。
  • 寄存器里放的内容是补码不是原码(容易粗心忽略)
  • x变成2x,一般选补码算术移位,向左移1位(不是两位,不是移原码)。

原码、反码、补码的移位规则

  • 偏移值为2n时,补码变成移码,其实就是符号位取相反数,但是变成移码后得把移码看成无符号数去比较而不能是有符号数。所以让移码最大其实就是让无符号数最大。
  • 让有符号数的补码最大,则让符号位为0,1尽量在高位
  • 让有符号数的补码最小,则让符号位为1,0尽量在高位(补码取反加1后高位的0就变成了1,原码就负的更多,值就越小)
  • 负数补码高位的1越多,则这个负数的真值越大。
  • [1011]unsigned=1*23+0 *22+1 *21+1 *20=11,1011是一个无符号数,位权相加即可。
  • [1011]signed=-1*23+0 *22+1 *21+1 *20=-5,注意这里的1011为补码,-5为真值,这种办法可以直接由补码算出真值(负权有时很好用)
  • [0011]signed=0*23+0 *22+1 *21+1 *20=3,注意这里的0011为补码,3为真值,这种办法可以直接由补码算出真值
  • 正数符号扩展补0,负数符号扩展补1,同时他们的真值不变。
  • 两个数相加,x为符号位进位,y为最高数值位进位,x异或y得到的值若为1表示溢出,为0表示未溢出。

最后

敬请大佬斧正

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

喜欢乙醇的四氯化碳

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值