我想以适当的 8 位 Qn.m 格式编写此(-0.67) 我怎样才能做到这一点? 通常我们有-1.67 可以表示为 整数部分 2 位,小数部分 4 位 但现在我们有-0.67 我们如何为其分配位数?
如何将数字转换为定点表示法
f = 小数位数
n = 浮点数
a = n * 2^f
b = 固定(a) 或圆形(a)
二进制定点 (bfp) = b/(2^f)
示例:
让:
f = 4
n = .67
a = .67 * 2^4
a = 10.72
b = fix(a) # 使用舍入方案获得我们想要的精度,fix() 向 0 舍入
b = 10
bfp = b/2^4
bfp = 10/2^4
bfp = .625
bfp 作为二进制 s3.4 格式 = 0000.1010
想要负数 -> 取补码
先取反码,然后加 1
bfp = 1111.0101
bfp 二元 = 1111.0110
十进制减 0.67 为带符号(二进制补码)s3.4 格式的 1111.0110。
不知道为什么你说 -1.67 整数需要 2 位,小数需要 4 位。如果您使用定点,则该点两侧的位数是固定的。例如,如果您使用 4.4,那么您会得到这些:
+1.67 = 0001.1011₂ (rounded), so -1.67 = 1110.0101₂
+0.67 = 0000.1011₂ (rounded), so -0.67 = 1111.0101₂
该点右侧的四位二进制数字可将您降至十六分之一,因此您需要将 0.67 转换为最接近的十六分之一。十进制 0.67 只是 67/100 的另一种写法; 100 和 16 的最小公倍数是 400,因此转换为分母我们得到 268/400。它介于 10/16 = 250/400 (0.1010 2) 和 11/16 = 275/400 (0.1011 2) 之间,但更接近 11/16,所以 0.1011 2 是我们对小数部分的答案。