C/C++的64位整型

在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 longcout非C++正確非C++正確無法編譯
__int64cout非C++正確非C++無法編譯無法編譯
long longprintint64()正確正確正確正確無法編譯

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

  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()是我自己寫的一個函數,可以看出,它的兼容性要好于其他所有的輸出方式,它是一段這樣的代碼:

?View Code CPP
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。看似很笨的寫法,效果如何?我把它和cout輸出方式做了比較,因為它和cout都是C++支持跨平臺的。首先printint64()和cout(不清空緩沖區)的運行結果是完全相同的,不會出現錯誤。我的試驗是分別用兩者輸出1000000個隨機數,實際結果是,printint64()在1.5s內跑完了程序,而cout需要2s。cout要稍慢一些,所以在輸出大量數據時,要盡量避免使用。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450656.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450656.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450656.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

記錄 Duplicate spring bean id dubbo

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 啟動工程 報錯如題&#xff1a; Duplicate spring bean id dubbo &#xff0c;意思是id 重復。 原因是我在加載配置文件時加載了兩個…

1.KafKa-介紹

轉載于:https://www.cnblogs.com/v-lcc/p/9674975.html

關于日志的123

寫在前面&#xff1a; 關于日志其實有很多想說的&#xff0c;不過將自己整理的文檔轉化為Blog還是比較花時間的&#xff0c;偶有疏漏&#xff0c;請多包涵。 本篇文章所講均只止于Java。 日志的作用&#xff1a; 1.定位問題&#xff0c;對于一個系統而言&#xff0c;總是會有些…

研究顯示每天工作超8小時得心臟病概率增加80%,生命很重要,工作不要那個累。

每天工作超過8小時的人患心臟病的風險最高可增加80%(資料圖) 據英國《每日郵報》9月12日報道&#xff0c;芬蘭職業保健研究所的科學家們近日進行了一項研究&#xff0c;他們發現每天工作超過8小時的人患心臟病的風險最高可增加80%。 研究人員表示&#xff0c;長時間的工作是許多…

SVN介紹

1.SVN介紹SVN是一個跨平臺的開源的版本控制系統&#xff0c;svn版本管理工具管理著隨時間改變的各種數據&#xff0c;這些數據放置在一個中央檔案庫&#xff08;repository&#xff09;中&#xff0c;svn會備份并記錄每個文件每一次的修改、更新、變動。這樣可以把任意一個時間…

記錄 Annotation processing is not supported for module cycles.

報錯&#xff1a;Error:java: Annotation processing is not supported for module cycles. Please ensure that all modules from cycle [A,B] are excluded from annotation processing 我是想啟動兩個 maven工程&#xff0c;相互作為服務提供方和消費方&#xff0c;于是在p…

沉淀再出發:Spring的架構理解

沉淀再出發:Spring的架構理解 一、前言 在Spring之前使用的EJB框架太龐大和重量級了&#xff0c;開發成本很高&#xff0c;由此spring應運而生。關于Spring&#xff0c;學過java的人基本上都會慢慢接觸到&#xff0c;并且在面試的時候也是經常遇到的&#xff0c;因為這個技術極…

用Python進行機器學習所需環境的配置(轉)

源&#xff1a;用Python進行機器學習所需環境的配置

成功創業者所需的能力

1. 富有遠見&#xff0c;樂在其中。 如果你能很好地預見自己的公司所在領域在很多年后的樣子&#xff0c;這能保證你在該領域取得長久的發展。很多人能在商業領域取得成功并不是因為他們徹底的廢舊立新&#xff0c;而是因為他們乘風破浪&#xff0c;能在現有的基礎上有所改進和…

記錄:non-compatible bean definition of same name and class [com.XXX.XXX]

啟動 springBoot 工程時報錯&#xff1a; Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name userLogAspect for bean class [com.foreveross.security.config.UserLogAspect] conflicts with existing,…

「日常訓練」 Genghis Khan the Conqueror(HDU-4126)

題意 給定\(n\)個點和\(m\)條無向邊&#xff08;\(n\le 3000\)&#xff09;&#xff0c;需要將這\(n\)個點連通。但是有\(Q\)次&#xff08;\(Q\le 10^4\)&#xff09;等概率的破壞&#xff0c;每次破壞會把\(m\)條邊中的某條邊的權值增大某個值&#xff0c;求\(Q\)次破壞每次將…

數學家吳文俊批判“中國式奧數”:害人害數學

奧數震動了兩位最高科技獎得主 一談起“奧數”&#xff0c;國內當今數學界的泰斗級人物吳文俊院士就急了。 他在沙發上挺直了腰&#xff0c;瞪大眼睛&#xff0c;伸出手掌指指點點&#xff1a;“是害人的&#xff0c;害數學&#xff01;” “什么奧林匹克&#xff1f;沒這回事&…

CentOS 7 搭建CA認證中心實現https取證

CA認證中心簡述CA &#xff1a;CertificateAuthority的縮寫&#xff0c;通常翻譯成認證權威或者認證中心&#xff0c;主要用途是為用戶發放數字證書功能&#xff1a;證書發放、證書更新、證書撤銷和證書驗證。作用&#xff1a;身份認證&#xff0c;數據的不可否認性端口&#x…

簡單明了 - Git 使用超詳細教程

見&#xff1a;http://www.admin10000.com/document/5374.html 一&#xff1a;Git是什么&#xff1f; Git是目前世界上最先進的分布式版本控制系統。 二&#xff1a;SVN與Git的最主要的區別&#xff1f; SVN是集中式版本控制系統&#xff0c;版本庫是集中放在中央服務器的&…

FileStream功能被禁用

今天還原數據庫&#xff0c;遇到如下問題&#xff1a; 網上的解決方法大概是三種&#xff1a; 1、講數據庫備份文件權限設置為“EventOne” 2、打開SQLServer配置管理器&#xff0c;選中服務然后右擊“屬性”將FileStream相關勾選并重啟當前實例服務 3、設置數據庫訪問級別 USE…

btree索引和hash索引的區別(待更新)

btreehash用于使用 , >, >, <, < 或者 BETWEEN 運算符的列比較。如果 LIKE 的參數是一個沒有以通配符起始的常量字符串的話也可以使用這種索引僅僅能滿足"","IN"和"<>"查詢

window.parent,top,window.self,parent,opener

2019獨角獸企業重金招聘Python工程師標準>>> 在應用有frameset或者iframe的頁面時&#xff0c;parent是父窗口&#xff0c;top是最頂級父窗口&#xff08;有的窗口中套了好幾層frameset或者iframe&#xff09;&#xff0c;self是當前窗口&#xff0c; opener是用ope…

ALM 中查看某個 test 的更改 history 歷史

ALM 中要查看某個 test 更改歷史&#xff0c; 需要下面兩個表&#xff1a;AUDIT_LOG and AUDIT_PROPERTIES------- Get Test modification history -------- ---- In ALM, 857, if filter out test case named 26169502, check its History. In the history, for the node of d…

編譯器vs.代碼 誰之過

摘要&#xff1a;編譯器是將程序語言編譯成機器語言的一種高級程序。如今許多編譯器越發智能&#xff0c;在編譯不通過的情況&#xff0c;你的代碼甚至都無法運行&#xff0c;那么到底是編譯的問題還是您的代碼問題呢&#xff1f; 許多程序員喜歡抱怨編譯器報出的各做錯誤&…

Android 在 Google 開發者大會上發布了哪些更新? | Google 開發者大會 2018

有哪些新的 Android 系統特性 Google Play 上的 targetVersion 要求 2018年8月 新應用發布必須為26或者更高2018年11月 升級現有應用必須為26或者更高2019年之后 新發布或者升級應用必須為一年內發布的 Android 版本工信部已經出臺相應的政策&#xff0c;中國主流的應用市場也已…