我有一點問題。本質上,代碼:uint64_t的容量?
uint64_t myInteger = 98930 * 98930;
NSLog(@"%qu", myInteger);
...只是錯了。我得到'1197210308'作爲輸出,這顯然是不正確的。這是爲什麼發生?它不可能是uint64_t太小,因爲它們顯然上升到18 and a half quintillion。任何人有任何想法?
我有一點問題。本質上,代碼:uint64_t的容量?
uint64_t myInteger = 98930 * 98930;
NSLog(@"%qu", myInteger);
...只是錯了。我得到'1197210308'作爲輸出,這顯然是不正確的。這是爲什麼發生?它不可能是uint64_t太小,因爲它們顯然上升到18 and a half quintillion。任何人有任何想法?
嘗試鑄造的第一個號碼,這樣的操作是使用類型進行:
uint64_t myInteger = (uint64_t)98930 *98930;
我不知道很多關於客觀-C,但在C做同樣的,整數促銷停在整數排名,所以你得到一個整數溢出。嘗試:
uint64_t myInteger = 98930LLU * 98930;
98930是int
,所以你乘以2個int
s,這給出了一個int
。然後,您將分配給uint64_t
,但已經太遲了,您已經失去了精確度。確保其中一個操作數的類型爲uint64_t
,所以另一個將被強制爲該類型,並且乘法將作爲uint64_t
乘法完成。
這解釋得很好,謝謝! – 2010-07-21 20:55:37
或者:'uint64_t myInteger = 98930UL * 98930UL;' – 2010-07-21 20:45:56
就是這樣。它現在有效。謝謝! – 2010-07-21 20:52:50
甚至更好:UINT64_C(98930)* UINT64_C(98930) – nall 2010-07-21 21:16:38