[英]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.