2015-08-21 47 views
-2

存儲日期我正在讀一讓美國C的書,在存儲日期在兩個字節的公式是有兩個字節

int year = 1990, month = 03, day=22 

date = 512*(year-1980)+32*month+day 

我不明白上面的公式,比如爲什麼1980年被減數給定年份,然後乘以512,然後乘以32和月份並加上日期。

有人請解釋我上面的公式。 在此先感謝。

+1

表示「日期」的聲明。 「負數如何存儲在位?」這是正確的問題 - 考慮一下。 – Olaf

+1

512和32是2的冪。乘以它們直接相當於按位「左移」操作。 1980年就是這個日期系統的「時代」 - 時間0. –

+2

@MarcB:它實際上是不相關的,如果它們是2的冪。它們只需要大於最大值。下部的可能值。 – Olaf

回答

3

上面的表格只存儲5位數的日期(1-31或0-30),4位數的月份(0-11或1-12)和7位數的年份只能存儲2字節。

時代這裏是1980年,這意味着在1980年到2127年之間的所有年份都會好的。我的建議是避免負面價值並選擇合適的開始年份。例如date = 512*(year-1950)+32*month+day會爲1950年和2077

我勸你還是避免負值,因爲符號值右移由標準爲實現相關所以你可以不知道規定歲之間被罰款,如果新的位將被填充與1或0.所以即使你想要處理值,總是使用unsigned short爲你2字節值或uint16_t有確定性的轉變。

+0

非常感謝你的解釋! – Aravind