C 整数表示到浮点表示

C 整数表示到浮点表示,c,algorithm,floating-point,ieee-754,C,Algorithm,Floating Point,Ieee 754,是否有一种算法可以通过使用整数运算将整数表示中的32位整数转换为IEEE 754浮点表示 我对此有一些想法,但到目前为止,这些想法都没有奏效。(使用C) 我本来想把整数移位,但后来没能做到 在此基础上构造新的浮点表示 我想我可以把整数转换成二进制,但它有相同的 第一种方法的问题 S表示符号位,其中1为负,0为正 E是二者的补码指数,偏移量为127 M是23位标准化尾数。最高位总是1 因此,它不会被存储 然后寻找二的补码 我将使用num作为一个位数组,我知道这不是标准的C数组范围访问,但您得

是否有一种算法可以通过使用整数运算将整数表示中的32位整数转换为IEEE 754浮点表示


我对此有一些想法,但到目前为止,这些想法都没有奏效。(使用C)

  • 我本来想把整数移位,但后来没能做到 在此基础上构造新的浮点表示

  • 我想我可以把整数转换成二进制,但它有相同的 第一种方法的问题

  • S表示符号位,其中1为负,0为正

    E是二者的补码指数,偏移量为127

    M是23位标准化尾数。最高位总是1 因此,它不会被存储

    然后寻找二的补码


    我将使用num作为一个位数组,我知道这不是标准的C数组范围访问,但您得到了要点
    对于一个基本算法,我们从填写S开始

    bit S = 0;
    if (num[0] ==1) {
      S = 1;
      num[1..32] = -num[1..32] + 1; //ignore the leading bit. flip all the bits then add 1
    }
    
    现在我们有了集合S,剩下的数字有了一个标量值

    然后我们可以通过找到1的第一个索引,将数字定位到尾数中。这也会让我们找到指数。注意这里的指数总是正的,因为我们不能有分数的int值。(另外,先做一个特例来检查值是否为0,以避免在这里出现无限循环,或者只是适当地修改循环,我很懒)

    然后你用S,E,M中的位来构造你的浮点,你说的“将整数转换成二进制”是什么意思?它已经是二进制的了。。。
    bit S = 0;
    if (num[0] ==1) {
      S = 1;
      num[1..32] = -num[1..32] + 1; //ignore the leading bit. flip all the bits then add 1
    }
    
    int pos = 1;
    signed byte E = 32;
    bit[23] M;
    while(num[pos] == 0) {
      --E;
      ++pos;
    }
    int finalPos = min(32, pos+23); //don't get too many bits
    M = num[pos+1..finalPos]; //set the mantissa bits