所以我有这个函数,我提取了给定 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;
.没有必要一点一点地走。