int 为什么是2147483647_2147483647代表什么
2008-10-25 回答
大家一定還記得上個世紀末給IT業界帶來不少麻煩的Y2K bug吧,很不幸的是,我們很快又將面臨另一個和時間有關的bug——Y2038問題。
專家警告說,Y2038 bug將于2038年1月19日(星期二)03:14:07am(GMT)正式爆發,屆時人們對千年蟲問題的預言可能將一一實現,比如手機網絡工作不正常,衛星脫離軌道,型號較老的電腦軟件軟硬件無法正常工作等。
什么是Y2038 bug
Time_t是C/C++ 等編程語言在內部代表/存儲日期和時間的一種數據類型。Time_t實際上是一個代表秒數的整數,當它的值為0時,代表的時間是1970年1月1日12:00:00;當Time_t=60時,則表示1970年1月1日12:01:00,依此類推。
所有32位電腦系統都用帶符號32位整型來存儲Time_t的值,也就是說Time_t只能用31位二進制數來表示(第一位用來表示正負號),而其最大值轉換為十進制是2147483647,換算成日期和時間剛好是2038年1月19日03:14:07am(GMT),而這一秒過后,Time_t的值將變成-2147483647,代表的是1901年12月13日8:45:52pm,這樣32位軟硬件系統的日期時間顯示就都亂套了。另外,無法接受Time_t為負值的其他功能也將返回錯誤。
舉個實際的例子來說,登陸上Yahoo messenger,給好友發個消息,恩沒問題,現在把系統時間更改為2038年1月19日03:14:07am,此時如果再發消息Yahoo messenger就將崩潰。
為何擔憂?
也許有人覺得2038年還早著,無需擔心這個問題。不幸的是,上世紀60年代的程序開發人員也抱有類似的錯誤想法,并由此導致了Y2K問題,給全球IT業帶來數十億美元的損失。
要知道時間對于許多電腦程序來說都非常重要,操作系統、數據庫程序、電子表格軟件、實時控制系統等無不涉及到時間。因此我們必須在Y2038 bug爆發前做好充足的準備。
盡管到2038年,桌面PC和服務器基本上都將升級到64位甚至128位,但仍會有許多使用中的32位甚至更古老的系統。即使是在32位系統盛行的今天,大多數嵌入式系統仍是8位或16位的,而小型嵌入式系統的數量其實比臺式機更多。
如何應對?
Y2038問題和Y2K一樣難纏,其中一種解決辦法就是用位數更多的數據類型來存儲日期和時間。如果使用64位數據類型,Time_t最大可以表示公元292000000000年,是宇宙估計年齡的20倍,最起碼看到這篇文章的各位都不會再遇到什么YXXXX問題了。
目前對于Y2038 bug的影響有多大還存在爭論,但有一點可以肯定的是:有備無患。相信我們能像克服Y2K問題那樣圓滿解決Y2038問題。
總結
以上是生活随笔為你收集整理的int 为什么是2147483647_2147483647代表什么的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: git推送密码_保护代码完整性(六):在
- 下一篇: python add argument