正如我們知道4294967295是unsigned int
中的最大數字,如果我將此數字自身乘以那麼該如何顯示它?我曾嘗試過:顯示很大數
long unsigned int NUMBER = 4294967295 * 4294967295;
但仍然得到1作爲答案。
正如我們知道4294967295是unsigned int
中的最大數字,如果我將此數字自身乘以那麼該如何顯示它?我曾嘗試過:顯示很大數
long unsigned int NUMBER = 4294967295 * 4294967295;
但仍然得到1作爲答案。
您正在發生溢出。考慮muplication十六進制:
0xffffffff * 0xffffffff == 0xfffffffe00000001
^^^^^^^^
only the last 32 bits are returned
解決的辦法是使用更大的類型如long long unsigned
:
long long unsigned int NUMBER = 4294967295ULL * 4294967295ULL;
後綴ULL
裝置unsigned long long
。
看到它聯機工作:ideone
感謝先生,但是如果我的號碼是儲存在像無符號unsigned long int類型NUM整數= 4294967295;然後 – mainajaved
在你的問題,你知道最大INT幽州等於4294967295。這意味着,你不能存儲數量比大,如果你使用的是無符號整型。
Ç多頭存儲多達18,446,744,073,709,551,615當64位UNIX系統[source]所以你只需要與UL後綴你的號碼無符號:4294967295UL
如果您使用的不是64位UNIX系統,那麼你應該使用long long unsigned int
和後綴LL
非常感謝主席先生\t 感謝先生,但是如果我的電話號碼是整數存儲像無符號unsigned long int類型NUM = 4294967295;然後 – mainajaved
是的,這是一個溢出。如果你使用c,那麼就沒有任何簡單的方法可以做到像我知道的那樣大數倍。也許你需要自己寫一個。實際上有些語言最初支持這些功能。
乘法溢出。
#include <stdio.h>
int main()
{
unsigned int a = 4294967295;
unsigned int b = 4294967295;
// force to perform multiplication based on larger type than unsigned int
unsigned long long NUMBER = (unsigned long long)a * b;
printf("%llu\n", NUMBER);
}
的[你怎麼printf的一個unsigned long長整型?](
謝謝先生,但如果我的號碼存儲在整數像無符號無符號長整型號= 4294967295;然後 – mainajaved
@mainajaved我已更新我的評論 – mloskot
好的,非常感謝這麼多先生 – mainajaved
可能重複http://stackoverflow.com/questions/2844/how-do-you-printf-an-unsigned-long-long- INT) – mloskot