免費開始練習
普考申論題 105年 [資訊處理] 程式設計概要

第 一 題

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

🤖
AI 詳解
AI 專屬家教

在 32 位元(32-bit)的系統架構中,宣告 int a; 預設為有號整數(signed integer),系統會分配 4 個位元組(即 32 bits)的記憶體空間給該變數。 推導過程如下:

  1. 32 個位元中,最高位元(MSB)作為符號位元(0 代表正數,1 代表負數)。

小題 (二)

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

思路引導 VIP

本題考查 32 位元整數溢位(Integer Overflow)概念及其實務應用「2038年問題」。解題關鍵是先確立 32 位元有號整數的最大值(2,147,483,647),再將此總秒數除以每天的秒數換算成天數與剩餘的時、分、秒,最後從 1970 年 1 月 1 日的基準點逐年(需精算並扣除閏年天數)推算確切的溢位日期與時間。

🤖
AI 詳解
AI 專屬家教

【解題思路】利用 32 位元有號整數的最大值,換算為累積的天數與時、分、秒,並加上 UNIX 起始時間(1970/1/1)以精確推算整數溢位發生的時間點(即著名的 Y2038 問題)。 【詳解】 (一) int a 的範圍

升級 VIP 解鎖