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,6482,147,483,647

()

如果計時系統使用32位的正整數來計算自197011日午夜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天,這會是2038119日。再加上剩下的時間3小時147秒,就是 2038119日的03:14:07。因此,計時系統會在20381193147秒出現問題,因為這時候的秒數將超出32位整數的範圍。這個問題通常被稱為2038年問題。

arrow
arrow
    文章標籤
    地方特考四等程式設計概要
    全站熱搜

    jacksaleok 發表在 痞客邦 留言(0) 人氣()