加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c:更改变量类型而不进行强制转换

发布时间:2020-12-16 09:58:09 所属栏目:百科 来源:网络整理
导读:我正在将uint32_t更改为float但不更改实际位. 只是为了确定:我不想施展它.所以float f =(float)i与我不想做的完全相反,因为它会改变位. 我将使用它将我的(伪)随机数转换为浮点数,而不进行不必要的数学运算. 我目前正在做什么以及已经在做什么是这样的: flo
我正在将uint32_t更改为float但不更改实际位.

只是为了确定:我不想施展它.所以float f =(float)i与我不想做的完全相反,因为它会改变位.

我将使用它将我的(伪)随机数转换为浮点数,而不进行不必要的数学运算.

我目前正在做什么以及已经在做什么是这样的:

float random_float( uint64_t seed ) {

    // Generate random and change bit format to ieee
    uint32_t asInt = (random_int( seed ) & 0x7FFFFF) | (0x7E000000>>1);

    // Make it a float
    return *(float*)(void*)&asInt; // <-- pretty ugly and nees a variable
}

问题:现在我想摆脱asInt变量,我想知道是否有更好/不那么丑陋的方式然后获取此变量的地址,将其转换两次并再次取消引用它?

解决方法

您可以尝试使用union – 只要确保类型的内存大小相同:

union convertor {
    int asInt;
    float asFloat;
};

然后你可以将你的int分配给asFloat(或者如果你愿意,可以另外一种方式).当我需要一方面进行按位操作并且另一方面仍然在数字上获得uint32_t表示时,我会使用它

[编辑]像许多评论员正确陈述的那样,你必须考虑像NAN,INF,-INF,-0这样的整数不可能出现的值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读