c - 16 位整数的奇怪按位运算

标签 c bit-manipulation

我正在查看一个 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 range 0 to RAND_MAX.

看起来很可能是编写该宏的人在 RAND_MAX 为 2147483647 的平台上工作。


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

关于c - 16 位整数的奇怪按位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9118850/

相关文章:

c - 我做错了什么 - C 指针

sql - PostgreSQL:位到smallint

c - 循环展开(按位运算)

c - fork() 子进程和父进程

缓存命中、未命中和预测 - 对性能的影响

c - 使用 C 操作位时遇到问题

c++ - 重复的 ~ 和 << 操作会在所有平台上收敛到负值吗?

c - C 中的按位移位

c - 如何在 C 中封装非标准调用约定?

C 循环中断子句