105年地方特考四等程式設計概要
十、在32 位元的作業系統下,試回答下列問題: (一) int a; 請問 a 的範圍?(4分) (二)計時系統都是以正整數範圍 (負整數範圍不計) 來計算秒數,假如開始計時時間為:1 January, 1970 at 12:00:00 a.m.(午夜12點,非中午12點),請問在西元何年何月何日何時,這樣的計時系統會出現問題?(8分) |
答:
(一)
在32位的作業系統下,int 通常是32位的,這意味著它可以存儲232不同的值。由於 int 是有符號的,所以這些值分為正數、負數和零。因此,int a 的範圍通常是 -231 到 231-1,也就是 -2,147,483,648到2,147,483,647。
(二)
如果計時系統使用32位的正整數來計算自1970年1月1日午夜12點以來的秒數,那麼它可以表示的最大秒數是231-1 = 2,147,483,647秒。將這些秒數轉換為年、月、日、時:
2,147,483,647秒÷60 = 35,791,394分鐘又7秒
35,791,394分鐘÷60 = 596,523小時又14分鐘
596,523小時÷24 = 24,855天又3小時
24,855天÷365 = 68年又35天 (忽略閏年)
然後,從1970年到2038年間,有17個閏年。這17個閏年會增加17天,所以35天-17天 = 18天。所以正確的計算是68年又18天,這會是2038年1月19日。再加上剩下的時間3小時14分7秒,就是 2038年1月19日的03:14:07。因此,計時系統會在2038年1月19日3時14分7秒出現問題,因為這時候的秒數將超出32位整數的範圍。這個問題通常被稱為2038年問題。