青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

為你寫詩

c/c++
隨筆 - 32, 文章 - 0, 評論 - 3, 引用 - 0
數據加載中……

acm中數據表示

C++的64位整數
         原文: http://www.cnitblog.com/cockerel/archive/2006/08/16/15356.html
  在做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++編譯器的擴展。
  VCVC6.0的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;

那么,在第2行會收到“error C2679: binary '>>' : no operator defined which takes a right-hand operand of type '__int64' (or there is no acceptable conversion)”的錯誤;在第3行會收到“error C2593: 'operator <<' is ambiguous”的錯誤。那是不是就不能進行輸入輸出呢?當然不是,你可以使用C的寫法:
scanf("%I64d",&a);
printf(
"%I64d",a);
就可以正確輸入輸出了。當使用unsigned __int64時,把"I64d"改為"I64u"就可以了。
  OJ通常使用g++編譯器。其64位擴展方式與VC有所不同,它們分別叫做long long 與 unsigned long long。處理規模與除輸入輸出外的使用方法同上。對于輸入輸出,它的擴展比VC好。既可以使用
1long long a;
2cin>>a;
3cout<<a;
也可以使用
scanf("%lld",&a);
printf(
"%lld",a);

使用無符號數時,將"%lld"改成"%llu"即可。
  最后我補充一點:作為一個特例,如果你使用的是Dev-C++的g++編譯器,它使用的是"%I64d"而非"%lld"。

http://www.cmykrgb123.cn/blog/

在C/C++中,64為整型一直是一種沒有確定規范的數據類型。現今主流的編譯器中,對64為整型的支持也是標準不一,形態各異。一般來說,64位整型的定義方式有long long和__int64兩種(VC還支持_int64),而輸出到標準輸出方式有printf(”%lld”,a),printf(”%I64d”,a),和cout << a三種方式。

本文討論的是五種常用的C/C++編譯器對64位整型的支持,這五種編譯器分別是gcc(mingw32),g++(mingw32),gcc(linux i386),g++(linux i386),Microsoft Visual C++ 6.0。可惜的是,沒有一種定義和輸出方式組合,同時兼容這五種編譯器。為徹底弄清不同編譯器對64位整型,我寫了程序對它們進行了評測,結果如下表。

變量定義 輸出方式 gcc(mingw32) g++(mingw32) gcc(linux i386) g++(linux i386) MicrosoftVisual C++ 6.0
long long “%lld” 錯誤 錯誤 正確 正確 無法編譯
long long “%I64d” 正確 正確 錯誤 錯誤 無法編譯
__int64 “lld” 錯誤 錯誤 無法編譯 無法編譯 錯誤
__int64 “%I64d” 正確 正確 無法編譯 無法編譯 正確
long long cout 非C++ 正確 非C++ 正確 無法編譯
__int64 cout 非C++ 正確 非C++ 無法編譯 無法編譯
long long printint64() 正確 正確 正確 正確 無法編譯

上表中,正確指編譯通過,運行完全正確;錯誤指編譯雖然通過,但運行結果有誤;無法編譯指編譯器根本不能編譯完成。觀察上表,我們可以發現以下幾點:

  1. long long定義方式可以用于gcc/g++,不受平臺限制,但不能用于VC6.0。
  2. __int64是Win32平臺編譯器64位長整型的定義方式,不能用于Linux。
  3. “%lld”用于Linux i386平臺編譯器,”%I64d”用于Win32平臺編譯器。
  4. cout只能用于C++編譯,在VC6.0中,cout不支持64位長整型。

表中最后一行輸出方式中的printint64()是我自己寫的一個函數,可以看出,它的兼容性要好于其他所有的輸出方式,它是一段這樣的代碼:

void printint64(long long a)
            {
            if (a<=100000000)
            printf("%d\n",a);
            else
            {
            printf("%d",a/100000000);
            printf("%08d\n",a%100000000);
            }
            }
這種寫法的本質是把較大的64位整型拆分為兩個32位整型,然后依次輸出,低位的部分要補0。

部分編譯錯誤
"warning: integer constant is too large for 'long' type"
疑問描述

Keywords: EDK, long long integer, 64-bit, SW, mb-gcc, powerpc-eabi-gcc, compiler, C/C++ , g++

When I define a long long integer data type in SW application in EDK, a warning / error similar to the following occurs:

"warning: integer constant is too large for 'long' type".

Example:
int main ()
{
long long int test = 0x0008888000000000;
},

解決方案
The warning message can be safely ignored, as mb-gcc is not doing anything wrong; the 64-bit computing is in fact correct.

This warning occurs because gcc is strict in syntax and requires LL on the end of such constants. This warning message disappears if the integer is appended with LL.

long long int test = 0x0008888000000000LL;

posted on 2011-04-14 14:40 pp_zhang 閱讀(561) 評論(0)  編輯 收藏 引用 所屬分類: acm

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美一区二区观看视频| 羞羞色国产精品| 欧美日韩另类视频| 久久久噜噜噜| 性做久久久久久久久| 亚洲影院一区| 亚洲在线成人精品| 亚洲一区二区精品| 亚洲女优在线| 午夜一区二区三区不卡视频| 亚洲专区在线视频| 久久精品30| 欧美国产在线观看| 欧美三级午夜理伦三级中视频| 欧美成人精精品一区二区频| 欧美久久久久久久久| 国产精品一区二区三区四区五区| 国产精品欧美久久| 激情久久久久久久| 一区二区三区黄色| 久久成人在线| 亚洲精品黄色| 亚洲一区一卡| 美女视频黄 久久| 国产精品三级久久久久久电影| 国产主播一区二区三区| 亚洲理论在线观看| 久久免费午夜影院| 国产精品99久久久久久白浆小说| 久久国产视频网站| 国产伦精品一区二区三区照片91| 亚洲国产成人av| 久久大综合网| 在线观看亚洲专区| 亚洲欧美在线视频观看| 欧美第一黄色网| 久久中文字幕一区二区三区| 国产乱码精品1区2区3区| 一本到12不卡视频在线dvd| 玖玖玖国产精品| 久久久综合网站| 黑人操亚洲美女惩罚| 久久人人爽爽爽人久久久| 亚洲午夜在线视频| 国产精品视频免费在线观看| 99xxxx成人网| 一本色道久久88综合亚洲精品ⅰ| 欧美黄色小视频| 亚洲一区二区在线免费观看视频| 亚洲高清不卡| 国产精品大片wwwwww| 午夜一区不卡| 久久精品在线视频| 亚洲精品在线观看视频| 日韩视频专区| 国内精品久久久久久影视8| 免费在线亚洲欧美| 欧美日韩在线精品| 久久久久久69| 欧美人与禽性xxxxx杂性| 亚洲午夜国产一区99re久久| 亚洲欧美福利一区二区| 亚洲国产91| 亚洲影院免费| 日韩系列在线| 欧美中在线观看| 亚洲午夜激情网页| 欧美黄色小视频| 永久免费视频成人| 夜色激情一区二区| 亚洲三级免费观看| 欧美一级专区免费大片| 在线视频精品一区| 欧美福利网址| 欧美1区3d| 激情五月***国产精品| 亚洲一区一卡| 亚洲综合日韩中文字幕v在线| 免费在线观看一区二区| 久久久久国产一区二区| 国产亚洲精品aa| 午夜精品在线视频| 欧美在线免费视屏| 国产一区二区三区久久| 午夜精品在线看| 久久全球大尺度高清视频| 国产精品揄拍500视频| 亚洲影视在线| 久久综合色88| 亚洲久久视频| 国产精品成人av性教育| 亚洲一区二区三区在线看| 欧美一区免费| 在线精品观看| 国产精品国产a级| 午夜精品久久久久久久久久久久久| 欧美中文在线观看| 亚洲国产清纯| 国产精品免费一区二区三区在线观看| 中文欧美日韩| 亚洲国产91精品在线观看| 亚洲欧美福利一区二区| 国内一区二区三区在线视频| 牛人盗摄一区二区三区视频| 亚洲视屏一区| 亚洲国语精品自产拍在线观看| 欧美视频一区二区三区在线观看| 亚洲图片欧洲图片av| 免费亚洲一区二区| 欧美有码视频| 亚洲精品乱码久久久久久久久| 久久黄色网页| 亚洲一区二区三区成人在线视频精品 | 欧美日韩亚洲成人| 久热精品视频在线| 久久免费视频一区| 欧美在线免费观看视频| 亚洲一区在线播放| 亚洲欧美一区二区视频| 99精品视频免费观看| 亚洲精品一区二区三| 最新成人av网站| 99日韩精品| 一本在线高清不卡dvd | 99热这里只有成人精品国产| 亚洲高清视频在线| 99在线精品视频| 亚洲欧美国内爽妇网| 欧美在线亚洲在线| 免费在线欧美视频| 国产精品福利网| 国产在线乱码一区二区三区| 亚洲国产综合视频在线观看| 一区二区三区产品免费精品久久75| 一本色道久久综合狠狠躁篇怎么玩| 亚洲小视频在线观看| 久久免费视频一区| 亚洲天堂黄色| 欧美大片免费久久精品三p | 亚洲一区二区三区乱码aⅴ蜜桃女| 在线亚洲伦理| 久久精品国产免费| 亚洲免费观看高清完整版在线观看| 99精品欧美一区| 女人天堂亚洲aⅴ在线观看| 国产精品久久久久久亚洲调教| 国内一区二区在线视频观看| 亚洲性图久久| 亚洲二区免费| 久久综合久久久| 韩日在线一区| 老巨人导航500精品| 亚洲综合不卡| 国产精品一区二区你懂的| 蜜桃久久精品乱码一区二区| 免费成人高清在线视频| 亚洲一区二区精品| 亚洲视频免费观看| 亚洲激情第一区| 亚洲精品中文字幕有码专区| 欧美午夜无遮挡| 韩国三级电影一区二区| 亚洲一区二区伦理| 国产日韩av高清| 国产乱码精品一区二区三区忘忧草 | 亚洲美女黄网| 美腿丝袜亚洲色图| 亚洲欧洲视频在线| 亚洲欧洲在线播放| 久久久综合免费视频| 亚洲欧洲另类国产综合| 欧美激情小视频| 亚洲一区二区在线免费观看视频| 亚洲精品美女| 欧美大片一区二区| 欧美激情综合在线| 久久成人国产| 欧美另类videos死尸| 欧美一区二区视频免费观看| 久久久久五月天| 亚洲一品av免费观看| 久久精品30| 欧美一级视频免费在线观看| 巨乳诱惑日韩免费av| 性欧美激情精品| 欧美激情视频一区二区三区免费| 亚洲一区在线播放| 美国十次了思思久久精品导航| 一本高清dvd不卡在线观看| 欧美影院精品一区| 亚洲午夜高清视频| 欧美国产在线观看| 欧美激情日韩| 在线日本高清免费不卡| 久久精品国产免费| 久久久久综合一区二区三区| 国产精品高潮呻吟| 亚洲自拍三区| 久久国产精品久久w女人spa| 欧美一区在线看|