2012-11-07 58 views
1

我想確定RAND_MAX是否可以放入一個unsigned int變量中。在查看C99標準後,我只發現RAND_MAX的值至少爲32767.雖然我知道RAND_MAX擴展爲int值,但我不確定它是否是long int。現在我正在處理unsigned long int變量,但我想簡化我的源代碼以使用unsigned int變量。保證RAND_MAX <= UINT_MAX?

概括地說,是這樣的假設語句真爲C99標準:

RAND_MAX < = UINT_MAX < = ULONG_MAX

而且,是RAND_MAX是明確地比(即不等於)UINT_MAX或ULONG_MAX以下。我意識到RAND_MAX的價值往往是一個梅森素數,但我不確定這是否是一個標準。

回答

12

RAND_MAXrand()可以返回的最大值。由於rand()定義爲返回int,因此RAND_MAX將不會超過INT_MAX,因此也不會超過UINT_MAX

+1

@WhozCraig *整數常量表達式*並不意味着該值適合於'int'。 – ecatmur

+0

這[鏈接](http://stackoverflow.com/questions/10708433/rand-max-macro-signed-or-unsigned)拋出我,因爲它似乎暗示系統可以實現一個rand函數返回無符號並且具有RAND_MAX的文字無符號值。 –

+3

@VilhelmGray:'rand'總是返回'int',並且我沒有在鏈接中看到任何暗示的東西。雖然由於某些原因某些系統爲'RAND_MAX'使用了無符號文字,但它們的值仍然是<= INT_MAX'。 – interjay

0

嘗試this

我同意這個問題的回答者梅森扭轉者會給你所有你需要的控制和速度。這對任何C++程序來說都是一個非常簡單的補充。

但是和其他許多人說的一樣,rand()的int返回類型實際上保證RAND_MAX小於UINT_MAX。

2

rand具有簽名int rand(void);,所以它返回必須適合的unsigned int內,由於int非負範圍中的任何非負值被包含在unsigned int的範圍內。

這並不明確說明RAND_MAX是< = INT_MAX,但要求其與的32767 RAND_MAX下限沿RAND_MAXrand返回值的範圍在0指示rand預期覆蓋範圍0RAND_MAX,如果它大於INT_MAX則不會是這種情況。