首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >16位整数上的奇异位运算

16位整数上的奇异位运算
EN

Stack Overflow用户
提问于 2012-02-02 19:42:34
回答 2查看 725关注 0票数 0

我正在查看一个c源文件,我发现了这个宏:

代码语言:javascript
复制
#define random ( (float) rand() / (float) ((1 << 31) -1) )

在标准的ANSI C rand()中,返回0,32767中的整数时,我非常感谢了解哪种归一化因子是分母,因为有符号整数是16位,表达式可以进行31位移位。

非常感谢你的注意,向你问好

EN

回答 2

Stack Overflow用户

发布于 2012-02-02 19:48:57

rand在"ANSI“中不返回0,32767中的整数。第7.20.2节:

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

似乎不管是谁写了这个宏,都可能是在一个平台上工作,RAND_MAX是2147483647。

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

票数 2
EN

Stack Overflow用户

发布于 2012-02-02 19:49:04

代码语言:javascript
复制
#define random ( (float) rand() / (float) ((1 << 31) -1) )

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

(C99,6.5.7p3)“如果右操作数的值为负,或者大于或等于提升的左操作数的宽度,则行为是未定义的”

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9118850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档