文章目录
1、整数及其二进制表示
假设用16位表示一个10位的二进制数。
1.1、无符号整数及其二进制表示
0000 0011 1111 1111 =1023;
0000 0011 1111 1110 =1022;
0000 0010 0000 0000 =512;
0000 0001 1111 1111=511;
0000 0000 0000 0001=1;
0000 0000 0000 0000=0;
则这个无符号十位数表示的范围:0~1023;
1.2、有符号整数及其二进制表示
这个10位数的最高位就表示符号位:0表示正数,1表示负数。
0000 0001 1111 1111 =511;
0000 0001 1111 1110 =510;
0000 0000 0000 0001 =1;
0000 0000 0000 0000=0;
1111 1111 1111 1111= -1;(辅助记忆:最高位为1表示负数,后面全为1表示最大,则为负的最大值即 -1)
1111 1110 0000 0001= -511;
1111 1110 0000 0000= -512;(辅助记忆:最高位为1表示负数,后面全为0表示最小,则为负的最小值即 -512)
则这个有符号十位数表示的范围:-512~511;
注意:计算一个负数的二进制时,首先计算它的绝对值的二进制,然后取反加1
2、小数及其二进制表示
2.1、有符号小数及其二进制表示
假定二进制数有16位,最高位为符号位,有效位有15位,那么小数点之后可以有0~15位,我们把小数点后有n位称为Qn格式。下面以Q12为例:
2.1.1 二进制数对应其小数
0111.1111 1111 1111 = 7.999755859375;小数点前面表示整数部分,小数点后面表示小数部分。
上面定点数转化为小数的计算方法:
- 计算 0111 1111 1111 1111 对应的十进制数;为 32767
- 其对应的十进制数除以 2 12 2^{12} 212 ; 32767/ 2 12 2^{12} 212=7.999755859375
也可以参照下面的方法计算
2.1.2 小数对应其二进制数
-7.999755859375 = 1000000000000001
上面小数转化为定点数的计算方法
- 将小数乘 2 12 2^{12} 212转化为十进制数 ;-7.999755859375× 2 12 2^{12} 212= - 32767
- 将这个十进制数转化为二进制; -32767 = 1000 0000 0000 0001
3、 定点小数的运算
4、Matlab中定点数的表示
4.1、定点数据对象的创建
举个例子: 创建一个有符号的定点数据对象,总位数16位,其中小数部分为15位。
x = fi(0.5,1,16,15); 其中 1表示有符号数。
4.2、定点数据对象的定点数据范围
如上面的例子,其定点数的范围: − 2 15 到 2 15 − 1 -2^{15}到2^{15}-1 −215到215−1,即:-32768~32767 。
4.3、定点数据对象真实数据范围
如上面的例子,真实值范围: − 1 到 1 − 2 − 15 -1到1-2^{-15} −1到1−2−15.
4.3、定点数据对象的分辨率
如上面的例子,其分辨率为: 2 − 15 2^{-15} 2−15,即:0.000030517578125
4.4、定点数据和真实数据的转换
如上面的例子:
>> x = fi(0.5,1,16,15);
y = x.int
z = x.double
x.double = 0.2;
y = x.int
z = x.double
x.int = 256;
z = x.double
y =
int16
16384
z =
0.5000
y =
int16
6554
z =
0.2000
z =
0.0078
>>
本文整理自https://blog.youkuaiyun.com/yanxiaopan/article/details/76853040