C 中的64位整數

2021-05-26 20:10:46 字數 1137 閱讀 2843

**: 在做acm題時,經常都會遇到一些比較大的整數。而常用的內建整數型別常常顯得太小了:其中long 和 int 範圍是[-2^31,2^31),即-2147483648~2147483647。而unsigned範圍是[0,2^32),即0~4294967295。也就是說,常規的32位整數只能夠處理40億以下的數。  那遇到比40億要大的數怎麼辦呢?這時就要用到c++的64位擴充套件了。不同的編譯器對64位整數的擴充套件有所不同。基於acm的需要,下面僅介紹vc6.0與g++編譯器的擴充套件。  vc的64位整數分別叫做__int64與unsigned __int64,其範圍分別是[-2^63, 2^63)與[0,2^64),即-9223372036854775808~9223372036854775807與0~18446744073709551615(約1800億億)。對64位整數的運算與32位整數基本相同,都支援四則運算與位運算等。當進行64位與32位的混合運算時,32位整數會被隱式轉換成64位整數。但是,vc的輸入輸出與__int64的相容就不是很好了,如果你寫下這樣一段**:1 __int64?a;2 cin >> a;3 cout << a="" c2679:="" binary="" :="" no="" operator="" defined="" which="" takes="" a="" right-hand="" operand="" of="" type="" there="" is="" no="" acceptable="" conversion="" c2593:="" is="" ambiguous="" scanf="" printf="" __int64="" long="" unsigned="" long="" long="" 1long="" long="" a="" 2cin="">>a;3cout<

__int64 i1 = 78901234567890i64; unsigned __int64 u1 = 43210987654321ui64; int main(void) #include

__int64 i1 = 78901234567890i64;unsigned __int64 u1 = 43210987654321ui64;int main(void) 輸出:i1 = -1609626926u1 = 3616656561i1 = 78901234567890u1 = 43210987654321press any key to continue

c 中的64位整數

主流編譯器不支援64位整數。c99將long long納入標準中。long long型別的位數不低於64.linux上gcc從4.5版本開始,完全支援c99標準,因此可以使用long long表示64位整數。windows vc6.0 不支援c99標準,但是windows為了支援64位整型,可以使用...

C 的64位整數

在做acm題時,經常都會遇到一些比較大的整數。而常用的內建整數型別常常顯得太小了 其中long 和 int 範圍是 2 31,2 31 即 2147483648 2147483647。而unsigned範圍是 0,2 32 即0 4294967295。也就是說,常規的32位整數只能夠處理40億以下的...

64位整數乘法

64位整數乘法 求 a 乘 b 對 p 取模的值。輸入格式 第一行輸入整數a,第二行輸入整數b,第三行輸入整數p。輸出格式 輸出乙個整數,表示a b mod p的值。資料範圍 1 a,b,p 1018 看到這個資料範圍有點茫然 跑去查了下unsigned long long 最近做題的時候,經常遇到...