数据的表示

移位运算

逻辑移位:在不丢失高位的情况下,左移乘二,右移除2

例:-4逻辑右移不为-2

算术移位: 左移时把高位移入到C位中,右移时根据符号位补充,最低位移入C位

循环移位: 把移出的位放到另外一边(可以用于加密)

位扩展:
unsigned char 8位
unsigned short 16位
unsigned int 32位
unsigned long 32/64位

二进制的乘除

无符号数乘法:原码一位乘法运算单元

用加法运算和定长寄存器做乘法: 看乘数最后一位,如果 是0,乘右移,如果是1,加上被乘数后右移。计算过程的移位次数为乘数的位数。

有符号原码数乘法

符号单独异或,数值相乘

补码一位乘法(Booth算法)

1.符号位参与计算

2.采用补码进行计算

3.被乘数X 一般取双符号位参与计算,并且让部分积P初始值为0,长度与被乘数X相同,乘数Y可取单符号位

4.开始计算时,乘数Y末尾增设附加位(Yn+1),值为0

5.移位规则(移位看乘数后两位(包括附加位),部分积右移时补位看最高位,超出的进位丢弃,移位n次,移出位n个)

移位规则:

•00/11部分积右移⼀位(即加0再右移⼀位)

•01 部分积加[X]补,且右移⼀位

•10 部分积加[-X]补,且右移⼀位

以4位有效bit为例:乘数移出4bit,处理过4次规则。

定点数原码除法(恢复余数)

1、商的符号为两数符号异或

2、值为两数绝对值除

例:01100111÷1001

1、将除数和被除数对齐

2、商清0

3、被除数减对齐后的除数得到部分被除数

4、如果部分被除数为正,则商左移补1.

5、如果部分被除数为负,则商左移补0. 并将小于0的部分被除数加上对齐后的除数

6、对除数右移,并重复第3到第5,直到减原被除数为负,

7、最后的负部分被除数加上原除。

定点数补码除法(加减交替)

1、符号位参与运算,且采用双符号位。

2、若被除数与除数同号,则被除数减除数;否则就加上除数。

3、余数与除数同号,商加1左移,余数左移减去除数;余数与除数异号,商加0左移,余数左移加上除数。

4、重复第3步n次

5、商末位恒置1,余数右移n位。

浮点数

浮点数其实是两个值的乘积,而且表示并不唯一。

IEE754浮点数标准

三种浮点数表示:

  1. 32位单精度浮点数
  2. 64位双精度浮点数
  3. 临时实数

规格化浮点数:小数点前面必须是1,左规(x2),右规(÷2)

1、当尾数为-1/2时,尾数的补码为11.100…0. 虽然这在1~1/2区间,但是不满足补码的规格化形式,因

而不是规格化数。

2、当尾数为-1时,尾数的补码是11.00…0, 因为小数补码允许表示-1,所以特别规定-1为规格化数。

3、0的尾数是全0.

补码的缺点:在比较大小时,因为有符号位而出现错误
--对所有值$+2^n$后再比
移码表示范围:0~$2^{n+1}-1$

符号位 阶码 尾数 总位数 最大指数 最小指数 指数偏移量
单精度(短实数) 1 8 23 32 +127 -126 +127
双精度(长实数) 1 11 52 64 +1023 -1022 +1023
临时实数 1 15 64 80 +16383 -16382 +16383

短实数:$2^{-126}$~$2^{127}$*$(2-2^{-23})$
长实数:$2^{-1022}$~$2^{1023}$*$(2-2^{-52})$

  • 规格化:正常计算规则
  • 非规格化
    • 表示0和很小的数:E全为0,M全为1
    • 正负无穷大:E全为1,M全为0
    • NaN:E全为1,M不全为0

IEE754中定义的4种舍入

  • 舍入到最接近:舍入到最接近,在一样接近的情况下偶数优先
  • 朝+∞方向舍入:会将结果朝正无限大的方向舍入
  • 朝-∞方向舍入:会将结果朝负无限大的方向舍入
  • 朝0方向舍入:会将结果朝0的方向舍入

浮点数的加减

步骤:
1.对阶:低阶向高阶对齐
2.尾数求和(差)
3.规格化处理
4.舍入
5.溢出判断

编程中需注意

因为精度损失,可能会导致:
1.浮点加法不具有结合性
2.$x^2-y^2$和(x+y)*(x-y)不一定相等
3.类型转换可能发生精度损失

浮点运算中的误差

1.乘法的相对误差比加法大
2.两个浮点数判断相等时,不能使用==,而要用abs

文本信息处理

ASCII码

字符集:ASCII编码定义了128个字符,包括大小写英文字母、数字0-9、标点符号、控制字符(如换行、回车)以及⼀些其他符号。

编码方式:每个ASCII字符被分配了⼀个从0到127的数字编码。例如,大写字母“A”的ASCII编码是65,小写字母“a”的编码是97。

⼆进制表示:ASCII字符使用7位二进制数来表示,这意味着每个字符可以用⼀个字节(通常是8位)中的7位来表示。例如,字母“A”的⼆进制表示是01000001。

控制字符:ASCII中的控制字符用于文本控制。例如,字符编码为10的“换行”(LF)用于表示文本行的结束。

兼容性:由于ASCII仅使用7位,它可以在8位字节的系统中使用而不会引起兼容性问题。这使得ASCII在早期计算机系统中非常流行。

局限性:ASCII仅能表示英语字母和基本符号,它无法表示其他语言的字符。

Unicode编码

全球一致,广泛

UTF-8编码特点

1到4个字节,包含控制码和字符码。

乱码

编码规则不一致

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇