当前位置:新励学网 > 秒知问答 > 关于二进制补码,它可以用来表示小数吗

关于二进制补码,它可以用来表示小数吗

发表时间:2024-07-25 10:13:59 来源:网友投稿

【二进制补码可以用来表示小数吗?】

可以不过需要你自己来处理。方法是按照所需要的精度,将该小数放大若干倍,当整数处理。

为方便通常放大2的若干次方倍。

这样你就可以把这个整数看成“定点小数”,即保留了若干位二进制小数的定点数。

有些资料上将这种格式称作Q格式。如“Q8格式”就是保留了8位小数位的定点数。

这种定点小数,做加减法时,需要小数点对齐,必要时需先做移位操作。

乘除法时也要掌握小数点位置。例如“Q8格式”和“Q4格式”的数相乘,其积应该看做“Q12格式”的。

需注意C语言中的移位操作中,其“右移”分为“算术右移”和“逻辑右移”两种。对于“有符号”数,实行的是“算术右移”,对于“无符号数”,实行的是“逻辑右移”。

如果您的程序中定义变量类型时定义的正确,那么你这些右移操作就不会错误。

如果您的程序中有“无符号”和“有符号”混用的地方,或强制类型转换的地方,需要注意这点不要出错。

“算术右移”和“逻辑右移”的区别:

“逻辑右移”时最高位一律补零。

“算术右移”时最高位保持不变,即:负数补1,正数补零。

例如用Q4的格式来表示0.75,放大2的4次方倍,为12,

机器码是0000000000001100

可以看做是定点小数000000000000.1100

另,用Q4的格式来表示-0.75,放大2的4次方倍,为-12,

机器码是1111111111110100

可以看做是定点小数111111111111.0100

如上按Q4格式,用12代表0.75,用-12代表-0.75。

要做(0.75)×(-0.75)用(12)×(-12)代表,乘得(-144)。

-144的机器码是1111111101110000

看做Q8格式的定点小数11111111.01110000

可以代表-0.5625。(等于-144/256,即-9/16)

假如下面又要做别的运算,需要把这个Q8的定点小数化为Q4格式,那么可以用>>4的运算,把这个数“算术右移”4位,得111111111111.0111。(这个数,如果当普通整数看,就是-9。)

需要注意的是这里右移的时候最高位补了4个1。

【给我一段二进制补码,我怎么将其还原成十进制的数值?】

首先要知道其字长。以16位字长为例:

16位字长如果是无符号数,可以表达的十进制数的范围是0~65535;

如果是有符号数,可以表达的十进制数范围是-32768~+32767。

这里65536是2的16次方,32768是2的15次方。

正整数的二进制化十进制想您应该知道吧?例如10010000化为十进制就是

((((((1×2+0)×2+0)×2+1)×2+0)×2+0)×2+0)×2+0=144

给你一个有符号数的补码表示法的16位二进制代码,暂时先按照上述无符号数(即正整数)的规则,化为十进制;

然后看其符号位(最高二进制位)是否是1:

如果是0,就表示它是正数。结果就对了。

如果是1,就表示它应是负数,将此暂时值再减去65536,所得结果(负数)就是应有的结果了。

上述“看其符号位是否是1”的判断,也可以代之以“看暂时值是否不小于32768”。

例如:1111111111110111按照上述规则,得暂时值为65527。

因为符号位是1,说明它应该是负数:65527-65536=-9。

免责声明:本站发布的教育资讯(图片、视频和文字)以本站原创、转载和分享为主,文章观点不代表本网站立场。

如果本文侵犯了您的权益,请联系底部站长邮箱进行举报反馈,一经查实,我们将在第一时间处理,感谢您对本站的关注!