簡體   English   中英

對16位整數進行奇怪的按位運算

[英]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函數計算范圍為0RAND_MAX的偽隨機整數序列。

似乎無論誰編寫該宏,都可能在RAND_MAX為2147483647的平台上工作。


您似乎也對帶符號整數感到困惑。 int必須至少為 16位寬,但通常更寬。

#define random ( (float) rand() / (float) ((1 << 31) -1) )

在具有16位int的系統中,由於1 << 31表達式( 1int類型),因此此宏是未定義的行為。

(C99,6.5.7p3)“如果右操作數的值為負或大於或等於提升后的左操作數的寬度 ,則行為不確定。”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM