此行printf ("Random[%d]= %u\n", i, rand());
產生一個隨機整數大多是1位,但這樣做的printf ("Random[%d]= %u\n", i, rand()%1000000);
當它產生6位整型,生成10位有符號整數
試圖生成一個10位的int錯誤時「警告:格式「% u'需要類型爲'unsigned int'的參數,但參數3的類型爲'long long int'[-Wformat]「。
那麼有沒有辦法產生一個隨機的10位有符號整數?
此行printf ("Random[%d]= %u\n", i, rand());
產生一個隨機整數大多是1位,但這樣做的printf ("Random[%d]= %u\n", i, rand()%1000000);
當它產生6位整型,生成10位有符號整數
試圖生成一個10位的int錯誤時「警告:格式「% u'需要類型爲'unsigned int'的參數,但參數3的類型爲'long long int'[-Wformat]「。
那麼有沒有辦法產生一個隨機的10位有符號整數?
您將顯式或隱式地傳遞給printf,這會導致sa「long long」或「unsigned long long」,這就是爲什麼您會收到警告 - 但稍後會更多;
生成一個10位的隨機數,你需要切換到64位 - 這麼長的時間;
unsigned long long randomvalue;
randomvalue = random();
randomvalue <<= 16; // just picked 16 at random
randomvalue ^= random(); // you could also use + but not "or";
randomvalue %= 10000000000ULL;
你得到的警告是因爲你傳遞的第三個參數printf
功能long long
類型的值,但你仍然使用"%u"
作爲格式,這使得printf
期望unsigned int
類型的值。
要取消警告,請將格式更改爲"%lld"
。
它不會幫助您創建一個10位數字高於2147483647
不過,因爲rand
返回int
迄今最多爲32位,即使是在64位平臺。價值2147483647
來自哪裏?如果是有符號的32位整數,則爲最高正值。
你預設了一個函數random(),它返回至少16個隨機位(+1表示「不要使用OR」) - 我會坐下來讓別人咀嚼那個一)。然而,OP使用'rand()'和* vide *關於Bits,Bytes,Digits的混淆,值得強調的是'rand()'只能*保證*在** 15 **位是隨機的RAND_MAX所說的完全取決於編譯器(好的,*不是*編譯器,但是爲了簡單起見,我們說它的確如此))。 – usr2564301
@Jongware我的答案中的代碼來自編輯而非我。 –
它不適合在一個Int32(檢查臺看如何int
定義)
在一個無符號INT32,最大值爲2^32 = 4,294,967,296。所以,當你做rand % 10000000000
,10000000000
是long
所以%
被計算爲long
操作(可提供這種類型的結果)
順便說一句:你應該清楚地區分「位」和「數字」。只有在處理二進制格式時它們纔是相同的。 – SJuan76
產生兩個整數,位位移他們中的一個在左,而結合? – Ashalynd
你確定你不混合「位」和「數字」的含義嗎? –
'rand()&1023' – CodesInChaos