c - 提取 IEEE 754 浮点格式数的小数部分时出现小错误
问题描述
所以我有这个函数,我提取了给定 int 的小数部分,以便我可以以十六进制形式输出它。
这是我的代码,其中结果是小数部分,然后我以十六进制形式打印。
// getting fraction part
result = 0;
int count = 0;
for (int which_digit = 23; which_digit >0; which_digit--) {
shifted_value = f >> (23 - count);
int fractionn = (shifted_value & 1) * (1 << which_digit) ;
result += fractionn;
count++;
}
如果给我数字 8,我的程序会正确打印小数部分的十六进制形式。但是,如果给定另一个数字,例如 -0.749000013,我的程序会打印 0x3fbe76 而不是 0x3fbe77。
有谁知道我哪里出错了
解决方案
你的循环结束条件是which_digit > 0
,所以你跳过#0位。应该是which_digit >= 0
。您还应该从第 22 位开始,而不是 23。
也就是说,您的整个循环可以用简单的result = f & 0x7fffff;
. 没必要一点一点的去。
推荐阅读
- git - windows中的github推送问题(将我的repo上传给另一个邀请我的github用户(不是私人公共))
- javascript - 如何通过按json数据分组制作json树?
- mysql - 在 MySQL 上进行查询以搜索快速数据
- xml - xslt 组合不同组中的属性
- javascript - 从 Fullcalendar 的 eventClick 信息访问子元素
- arrays - 从对象数组创建唯一数组
- python - 在没有日期信息的条形图中绘制多天的数据
- character-encoding - 如何在服务人员中处理 301 重定向?
- python - 当 xml 作为字符串输入时,如何在 ElementTree 中获取 xml 的命名空间?
- c++ - 不明白这个程序的输出