我正在查看一个 c 源文件,我发现了这个宏:
#define random ( (float) rand() / (float) ((1 << 31) -1) )
虽然在标准 ANSI C rand() 中返回 [0,32767] 中的整数,但我非常感谢帮助理解分母是哪种归一化因子,因为有符号整数是 16 位并且表达式是 31-位移位。
非常感谢您的关注 最好的问候
最佳答案
rand
在“ANSI C”中不返回 [0,32767] 中的整数。 §7.20.2:
The
rand
function computes a sequence of pseudo-random integers in the range0
toRAND_MAX
.
看起来很可能是编写该宏的人在 RAND_MAX
为 2147483647 的平台上工作。
您似乎也对有符号整数感到困惑。 int
必须至少 16 位宽,但它通常更宽。
关于c - 16 位整数的奇怪按位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9118850/