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这样的整数不可能出现的值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |