相关疑难解决方法(0)

在C中将float转换为int(按位)

给定代表IEEE 754浮点数的32位,如何使用表示上的整数或位操作(而不是使用机器指令或编译器操作进行转换)将数字转换为整数?

我有以下功能,但在某些情况下失败:

输入:int x(包含IEEE 754格式的32位单精度数)

  if(x == 0) return x;

  unsigned int signBit = 0;
  unsigned int absX = (unsigned int)x;
  if (x < 0)
  {
      signBit = 0x80000000u;
      absX = (unsigned int)-x;
  }

  unsigned int exponent = 158;
  while ((absX & 0x80000000) == 0)
  {
      exponent--;
      absX <<= 1;
  }

  unsigned int mantissa = absX >> 8;

  unsigned int result = signBit | (exponent << 23) | (mantissa & 0x7fffff);
  printf("\nfor x: %x, result: %x",x,result);
  return result;
Run Code Online (Sandbox Code Playgroud)

c floating-point bit-manipulation bitwise-operators

13
推荐指数
6
解决办法
3万
查看次数

使用Bitwise将Int转换为Float/Float到Int

我想知道你是否可以帮助解释将整数转换为float或float转换为整数的过程.对于我的课程,我们只使用按位运算符来完成此操作,但我认为从类型到类型的强制理解将在这个阶段帮助我更多.

根据我目前所知,对于int要浮动,你必须将整数转换为二进制,通过查找有效数,指数和分数来规范化整数的值,然后从那里输出浮点值?

至于float到int,你必须将值分成有效数,指数和分数,然后反转上面的指令得到一个int值?

我试着按照这个问题的说明:在C中将float转换为int(按位)

但我真的不能理解它.

另外,有人可以解释为什么在将int转换为float时大于23位的值需要舍入?

提前致谢

floating-point assembly arm bit-manipulation ieee-754

10
推荐指数
1
解决办法
1万
查看次数

将int转换为C中的float(无转换)

如何将int转换为float(返回为无符号,但解释为float)?我不能使用任何高级语言结构,如联合,只有按位操作,控制逻辑(if/while),+和 - 等.

c floating-point int bitwise-operators

0
推荐指数
1
解决办法
1万
查看次数