题目
关于二进制补码,它可以用来表示小数吗
二进制补码可以用来表示小数吗?还有给我一段二进制补码,我怎么将其还原成十进制的数值?请举例说明
二进制补码可以用来表示小数吗?还有给我一段二进制补码,我怎么将其还原成十进制的数值?请举例说明
提问时间:2020-08-07
答案
【二进制补码可以用来表示小数吗?】
可以,不过需要你自己来处理.方法是,按照所需要的精度,将该小数放大若干倍,当整数处理.
为方便通常放大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.
可以,不过需要你自己来处理.方法是,按照所需要的精度,将该小数放大若干倍,当整数处理.
为方便通常放大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.
举一反三
已知函数f(x)=x,g(x)=alnx,a∈R.若曲线y=f(x)与曲线y=g(x)相交,且在交点处有相同的切线,求a的值和该切线方程.
我想写一篇关于奥巴马的演讲的文章,写哪一篇好呢?为什么好
奥巴马演讲不用看稿子.为什么中国领导演讲要看?
想找英语初三上学期的首字母填空练习……
英语翻译
最新试题
热门考点
- 1英语 中译英 用定语从句
- 2一个钟表的时针长8厘米,分针长10厘米,从中午12时到下午6时,时针扫过的面积是多少平方厘米?
- 3知道电阻、电压和时间,怎样求消耗的电能?急用
- 4“You will have to stay here for two hours ”,he said to Marry 改为间接引语
- 5请帮忙翻译:l thought you said look our best
- 6用数字1,3,9,10,经过怎样运算才能得到24
- 7求一表达友情的自创诗或词(古风的),四五句可,两三句也可,一两句也可,
- 8小红家与小明家分别在学校的东西两边(如图).两人同时从家出发,经过16分后同时到达学校.小红每分钟走22米,小明每分钟走多少米?
- 9已知点F1 F2 是椭圆x^2+2y^2=2 的两个焦点,点P是该椭圆上的一个动点 那么
- 10小明买了两斤苹果,第一天吃了三分之一斤,第二天吃了剩下的三分之一,还剩多少斤?