普考申論題
105年
[資訊處理] 程式設計概要
第 一 題
📖 題組:
在 32 位元的作業系統下,試回答下列問題: (一) int a; 請問 a 的範圍?(4 分) (二)計時系統都是以正整數範圍(負整數範圍不計)來計算秒數,假如開始計時時間 為:1 January, 1970 at 12:00:00 a.m.(午夜 12 點,非中午 12 點),請問在西元何年 何月何日何時,這樣的計時系統會出現問題?(8 分)
在 32 位元的作業系統下,試回答下列問題: (一) int a; 請問 a 的範圍?(4 分) (二)計時系統都是以正整數範圍(負整數範圍不計)來計算秒數,假如開始計時時間 為:1 January, 1970 at 12:00:00 a.m.(午夜 12 點,非中午 12 點),請問在西元何年 何月何日何時,這樣的計時系統會出現問題?(8 分)
📝 此題為申論題,共 2 小題
小題 (一)
int a; 請問 a 的範圍?
思路引導 VIP
看到此題,應先確認在 32 位元系統下 int 預設的記憶體大小為 4 bytes(32 bits),並且預設為有號整數(signed integer)。接著回想二補數表示法,扣除一個符號位元後,利用公式 $-2^{n-1}$ 到 $2^{n-1}-1$ 即可推導出精確的十進位數值範圍。
小題 (二)
計時系統都是以正整數範圍(負整數範圍不計)來計算秒數,假如開始計時時間為:1 January, 1970 at 12:00:00 a.m.,請問在西元何年何月何日何時,這樣的計時系統會出現問題?
思路引導 VIP
本題考查 32 位元整數溢位(Integer Overflow)概念及其實務應用「2038年問題」。解題關鍵是先確立 32 位元有號整數的最大值(2,147,483,647),再將此總秒數除以每天的秒數換算成天數與剩餘的時、分、秒,最後從 1970 年 1 月 1 日的基準點逐年(需精算並扣除閏年天數)推算確切的溢位日期與時間。