[英]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
函数计算范围为0
到RAND_MAX
的伪随机整数序列。
似乎无论谁编写该宏,都可能在RAND_MAX
为2147483647的平台上工作。
您似乎也对带符号整数感到困惑。 int
必须至少为 16位宽,但通常更宽。
#define random ( (float) rand() / (float) ((1 << 31) -1) )
在具有16位int
的系统中,由于1 << 31
表达式( 1
是int
类型),因此此宏是未定义的行为。
(C99,6.5.7p3)“如果右操作数的值为负或大于或等于提升后的左操作数的宽度 ,则行为不确定。”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.