免費開始練習
地特四等申論題 105年 [資訊處理] 程式設計概要

第 一 題

📖 題組:
在 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 推導出精確的數值範圍。

🤖
AI 詳解
AI 專屬家教

在 32 位元的作業系統下,變數 a 的範圍推導與結果如下:

  1. 佔用空間:在 32 位元系統中,C/C++ 等主流程式語言的 int 型態通常佔用 4 個位元組(Bytes),也就是 32 個位元(Bits)。
  2. 資料型態:宣告為 int a; 時,預設為「有號整數(Signed Integer)」,其最高位元(MSB)作為符號位元(0 表正數,1 表負數),並採用「二的補數(2's complement)」表示法。

小題 (二)

計時系統都是以正整數範圍(負整數範圍不計)來計算秒數,假如開始計時時間為:1 January, 1970 at 12:00:00 a.m.,請問在西元何年何月何日何時,這樣的計時系統會出現問題?

思路引導 VIP

首先確認 32 位元有號整數(Signed Integer)的正數最大值為 2 的 31 次方減 1。接著將此最大秒數轉換為天數、小時、分鐘與秒,並加上起始基準日(1970年1月1日),計算過程中需留意閏年天數的累加,推導出著名的「2038年問題」發生時間。

🤖
AI 詳解
AI 專屬家教

【解題思路】利用 32 位元有號整數的正數最大值進行秒數換算,並推算出距離 1970 年 1 月 1 日的精確日期與時間(即 2038 年問題)。 【詳解】 已知:在 32 位元系統中,時間若以標準有號整數(signed int)儲存,題目指明「負整數範圍不計」,故正整數的最大計時範圍為 $2^{31} - 1$。

升級 VIP 解鎖