内容概要:数据在计算机中的存储和运算、相关习题
基础知识:
真值和机器数
- 真值:现实中带正负号的数值
- 机器数:把正负号数字化的数
1.进制
1.1R进制转10进制,如:
101.0101 (16)=1*16^2+0+1*16^0+0+1*16^-2+0+1*16^-4
1.2 小数转二进制,如:
0.8125-> 2*0.8125=1.625 1取出整数保留小数
2*0.625=1.25 1
2*0.25=0.5 0
2*0.5=1 1
所以二进制为 0.1102 (2)
1.3 十进制到8/16进制的转化
技巧:可以通过2进制过渡,16进制对应二进制4位,8进制对应二进制3位
327.8125=101000111.1101->16进制
1 0100 0111.1101
1 4 7 . D
1.4 分数化简二进制
分子化为二进制,分母化为2^n,n有几位小数点从左向右边移动几位。如:
2.码的转换原码/反码/补码计算器 - 一个工具箱 - 好用的在线工具都在这里! (atoolbox.net)
http://www.atoolbox.net/Tool.php?Id=952
由于正数的原码、反码、补码一样,着重讲解负数的🐎。
原码
x=+1110 原 0,111
x=-1110 原 1,1110
x=-0.1101 原 1.1101
2.2 转换
负数-19 原码 ——>反码——> 补码
1,0010011 1,1101100 1,1101101
反码:符号位不变
补码:在反码的末尾+1 。(补码符号位可以直接运算)
补码——>反码怎么处理??
补码——>原码——>反码
补充技巧
原码——>补码快速计算
1,0010011
⬆️第一个1不动
1,{001001}1。括号里的全部取反得到补码1,{110110}1
补码——>原码
1,{110110}1同上也是全部取反得到原码1,0010011
就可以快速完成补码——>反码
为什么这么处理A补-B补<==>A补+(-B补)??
因为计算更简单做加法,补码符号位可以直接运算。
技巧:由 [x] 补快速求 [-x] 补的方法。原码符号位、数值位全部取反,末位 + 1
19 原码0,0010011
补码 0,0010011 (注意:正数是一样的)
负补码 1,1101101
移码:补码的基础上只将符号位取反。移码 = 真值 + 偏置值。作用方便比较大小
3.数的定点表示和浮点表示
浮点数:
S是尾数(精度),r是基数,j是阶数(反应范围)
规格化数:尾数S最高位位1的浮点数
浮点数的表示形式:
例题:若浮点数字长16位,其中阶码5位(含一位阶符),尾数11位(含一位数符)。将十进进制-58写成二进制的定点数和浮点数并写它在定点机和浮点机中的机器数形式。
定点数:x=-00 0011 1010 浮点数:x=-0.11 1010 0000*2^110
浮点数要规格化:写成0.1xxxx 这里相当于小数点右移6位
浮点机:原码:0,0110;1.111010 0000
反码:0,0110;1.000101 1111
补码:0,0110;1.000110 0000
阶移,尾补:1,0110;1.000110 0000
4.定点运算
4.1位移运算
101(5)->1010(10)
溢出判断
方法一:采用一位符号位,根据数据位进位情况判断溢出符号的进位C5最高教值位的进位C1
上溢出 0 1
下溢出 1 0
绿色是符号位,看C5和C1这两个数的进位,如果不一样则有溢出。
方法二:采用双符号位
正数符号为00,负数符号为11