地特四等申論題
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
看到 int 且在 32 位元系統下,應直覺反應其佔用 4 bytes(32 bits)。接著判定預設為有號整數(Signed),利用二的補數(2's complement)公式 -2^(n-1) ~ 2^(n-1)-1 推導出精確的數值範圍。
小題 (二)
計時系統都是以正整數範圍(負整數範圍不計)來計算秒數,假如開始計時時間為:1 January, 1970 at 12:00:00 a.m.,請問在西元何年何月何日何時,這樣的計時系統會出現問題?
思路引導 VIP
首先確認 32 位元有號整數(Signed Integer)的正數最大值為 2 的 31 次方減 1。接著將此最大秒數轉換為天數、小時、分鐘與秒,並加上起始基準日(1970年1月1日),計算過程中需留意閏年天數的累加,推導出著名的「2038年問題」發生時間。