繁体   English   中英

对16位整数进行奇怪的按位运算

[英]Strange bitwise operation on a 16-bit integer

我正在查看交流源文件,但发现了此宏:

#define random ( (float) rand() / (float) ((1 << 31) -1) )

在标准ANSI C rand()返回[0,32767]中的整数的同时,我非常感谢您帮助理解分母是哪种归一化因子,因为带符号整数为16位,并且表达式进行31位移位。

非常感谢您的关注最好的问候

rand在“ ANSI C”的[0,32767]中不返回整数。 §7.20.2:

rand函数计算范围为0RAND_MAX的伪随机整数序列。

似乎无论谁编写该宏,都可能在RAND_MAX为2147483647的平台上工作。


您似乎也对带符号整数感到困惑。 int必须至少为 16位宽,但通常更宽。

#define random ( (float) rand() / (float) ((1 << 31) -1) )

在具有16位int的系统中,由于1 << 31表达式( 1int类型),因此此宏是未定义的行为。

(C99,6.5.7p3)“如果右操作数的值为负或大于或等于提升后的左操作数的宽度 ,则行为不确定。”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM