软件设计师教程学习笔记(一)数值计算

这篇博客详细介绍了数值计算的基础知识,包括10进制到2进制的转换,2进制到10进制的转换,原码、反码和补码的概念及其相互转换,以及浮点数的表示方法,如遵循IEEE754标准的单精度浮点数。此外,还涉及了海明码的校验原理,用于数据错误检测。
摘要由CSDN通过智能技术生成
一、10进制——>2进制

1、正整数

除2取余,从下往上,位数不足2的幂次时,高位补0
例:
25----0001 1001
25/2=12=======余1
12/2=6========余0
6/2=3=========余0
3/2=1=========余1
1/2=0=========余1

2、正小数

乘2取整,从上往下
例:
0.7----0.10110011001100110011001100110011001100110011001100111
0.7*2=1.4========取出整数部分1
0.4*2=0.8========取出整数部分0
0.8*2=1.6========取出整数部分1
0.6*2=1.2========取出整数部分1
0.2*2=0.4========取出整数部分0
0.4*2=0.8========取出整数部分0
0.8*2=1.6========取出整数部分1
0.6*2=1.2========取出整数部分1
0.2*2=0.4========取出整数部分0
			……

3、负整数

绝对值转二进制,然后取反,最后对结果+1,位数不足2的幂次时,高位补1(这里是补码,要求原码直接将正数的最高位取反)
-25-----1110 0111
25/2=12=======余1
12/2=6========余0
6/2=3=========余0
3/2=1=========余1
1/2=0=========余1
1 1001---取反---0 0110---+1---0 0111----补1---1110 0111

4、负小数

二、2进制——>10进制

1、正整数

0001 1001 ---- 25
2^4 + 2^3 + 2^0 = 16 + 8 + 1 = 25

2、正小数

0.10110011001100110011001100110011001100110011001100111 ---- 0.7
0 * 2^0 + 1 * 2^-1 + 0 * 2^ -2 + 1 * 2^-3 + 1 * 2^-4 ……= 0.7

3、负整数

1110 0111 ------ -25
先取反 0001 1000,再 +1 = 0001 1001
2^4 + 2^3 + 2^0 = 16 + 8 + 1 = 25
取反 = -25

4、负小数

三、原码、反码、补码

1、正整数的原码、反码和补码都一样。
2、负数原码<—>反码转换:符号位不变,数值位按位取反
3、负数原码<—>补码转换:符号位不变,数值位按位取反+1
4、正整数原码<—>负数原码:符号位取反
5、正整数反码<—>负数反码:符号位和数值位都取反
6、正整数补码<—>负数补码:符号位和数值位都取反+1
7、原码<—>移码转换:先把这个数化为补码,然后再根据补码的第一位数字取反即可。

真值:25				-25
原码:0001 1001		1001 1001
反码:0001 1001		1110 0110
补码:0001 1001		1110 0111
移码:1001 1001		0110 0111
四、浮点数

用IEEE754将数表示为单精度浮点数

176.0625->10110000.0001
->1♦01100000001*2^7  (阶码:7,尾数:01100000001)
单精度尾数长度:23,双精度尾数长度:52
->01100000001000000000000
单精度偏移量:127,双精度偏移量:1023
单精度指数长度:8 (-126~127),双精度指数长度:11 (-1022~1023)
阶码E=7+127=134=10000110
单精度浮点数为:0 10000110 01100000001000000000000
单精度浮点数长:32 (10^-38~10^38),双精度浮点数长:64 (10^-308~10^308)

浮点数运算

加减:
1、对阶。阶码小的阶码+k,尾数右移k位;
2、求尾数和(差);
3、结果规格化,并判溢出。非规格化要转规格化,尾数溢出要调整阶码;
4、舍入处理。尾数最低为因移出而丢掉,就需要舍入处理,以求得最小运算误差;
5、溢出判别。以阶码为准,若阶码溢出,则结果溢出。若阶码下溢(小于最小值),则结果为0,否则结果正确,无溢出。
乘除:结果都需要进行规格化处理,并判断阶码是否溢出。
乘:
阶码相加,尾数相乘。
除:
阶码相减,尾数相除。
五、海明码

例:1100 1110

1、
在这里插入图片描述
根据原始信息位数n求出k——>n=8,k=4
校验码是放在2的幂次位上的,如 1,2,4,8,16…等
故校验码为:1,2,4,8

2、

位置87654321
原始信息位11001110
位置121110987654321
加入校验码后的信息位1100H4111H30H2H1

3、

位置二进制
10001
20010
30011H1+H2
40100
50101H1+H3
60110H2+H3
70111H1+H2+H3
81000
91001H1+H4
101010H2+H4
111011H1+H2+H4
121100H3+H4
校验码出现的位置对应的值异或结果
H13、5、7、9、110⊕1⊕1⊕0⊕11
H23、6、7、10、110⊕1⊕1⊕0⊕11
H35、6、7、121⊕1⊕1⊕10
H49、10、11、120⊕0⊕1⊕10
位置121110987654321
最终信息位110001110011

4、查错
接受到的数据:1100 1110

位置121110987654321
加入校验码后的信息位1100H4111H30H2H1
最终信息位110001110011

G1=H1⊕0⊕1⊕1⊕0⊕1=0
G2=H2⊕0⊕1⊕1⊕0⊕1=0
G3=H3⊕1⊕1⊕1⊕1=0
G4=H4⊕0⊕0⊕1⊕1=0
G4G3G2G1=0000
都为0则没出现错误,否则出错,如G4G3G2G1=1010,则第10个位置0,数据出错
注:以上为偶校验,采用异或和全为0来判断,奇校验采用取反和全为1来判断。

参考:https://blog.csdn.net/coolskyying/article/details/78963550

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值