首先說明一下,數(shù)組中的每一個(gè)元素,都對(duì)應(yīng)著一個(gè)年份。根據(jù)這個(gè)元素,可以計(jì)算出在該年份中,農(nóng)歷歷法一共有多少天。
代碼詳情
lunarInfo: [
0x04bd8,
0x04ae0,
0x0a570,
0x054d5,
0x0d260,
0x0d950,
0x16554,
0x056a0,
0x09ad0,
0x055d2, // 1900-1909
0x04ae0,
0x0a5b6,
0x0a4d0,
0x0d250,
0x1d255,
0x0b540,
0x0d6a0,
0x0ada2,
0x095b0,
0x14977, // 1910-1919
0x04970,
0x0a4b0,
0x0b4b5,
0x06a50,
0x06d40,
0x1ab54,
0x02b60,
0x09570,
0x052f2,
0x04970, // 1920-1929
0x06566,
0x0d4a0,
0x0ea50,
0x06e95,
0x05ad0,
0x02b60,
0x186e3,
0x092e0,
0x1c8d7,
0x0c950, // 1930-1939
0x0d4a0,
0x1d8a6,
0x0b550,
0x056a0,
0x1a5b4,
0x025d0,
0x092d0,
0x0d2b2,
0x0a950,
0x0b557, // 1940-1949
0x06ca0,
0x0b550,
0x15355,
0x04da0,
0x0a5b0,
0x14573,
0x052b0,
0x0a9a8,
0x0e950,
0x06aa0, // 1950-1959
0x0aea6,
0x0ab50,
0x04b60,
0x0aae4,
0x0a570,
0x05260,
0x0f263,
0x0d950,
0x05b57,
0x056a0, // 1960-1969
0x096d0,
0x04dd5,
0x04ad0,
0x0a4d0,
0x0d4d4,
0x0d250,
0x0d558,
0x0b540,
0x0b6a0,
0x195a6, // 1970-1979
0x095b0,
0x049b0,
0x0a974,
0x0a4b0,
0x0b27a,
0x06a50,
0x06d40,
0x0af46,
0x0ab60,
0x09570, // 1980-1989
0x04af5,
0x04970,
0x064b0,
0x074a3,
0x0ea50,
0x06b58,
0x055c0,
0x0ab60,
0x096d5,
0x092e0, // 1990-1999
0x0c960,
0x0d954,
0x0d4a0,
0x0da50,
0x07552,
0x056a0,
0x0abb7,
0x025d0,
0x092d0,
0x0cab5, // 2000-2009
0x0a950,
0x0b4a0,
0x0baa4,
0x0ad50,
0x055d9,
0x04ba0,
0x0a5b0,
0x15176,
0x052b0,
0x0a930, // 2010-2019
0x07954,
0x06aa0,
0x0ad50,
0x05b52,
0x04b60,
0x0a6e6,
0x0a4e0,
0x0d260,
0x0ea65,
0x0d530, // 2020-2029
0x05aa0,
0x076a3,
0x096d0,
0x04afb,
0x04ad0,
0x0a4d0,
0x1d0b6,
0x0d250,
0x0d520,
0x0dd45, // 2030-2039
0x0b5a0,
0x056d0,
0x055b2,
0x049b0,
0x0a577,
0x0a4b0,
0x0aa50,
0x1b255,
0x06d20,
0x0ada0, // 2040-2049
0x14b63,
0x09370,
0x049f8,
0x04970,
0x064b0,
0x168a6,
0x0ea50,
0x06b20,
0x1a6c4,
0x0aae0, // 2050-2059
0x0a2e0,
0x0d2e3,
0x0c960,
0x0d557,
0x0d4a0,
0x0da50,
0x05d55,
0x056a0,
0x0a6d0,
0x055d4, // 2060-2069
0x052d0,
0x0a9b8,
0x0a950,
0x0b4a0,
0x0b6a6,
0x0ad50,
0x055a0,
0x0aba4,
0x0a5b0,
0x052b0, // 2070-2079
0x0b273,
0x06930,
0x07337,
0x06aa0,
0x0ad50,
0x14b55,
0x04b60,
0x0a570,
0x054e4,
0x0d160, // 2080-2089
0x0e968,
0x0d520,
0x0daa0,
0x16aa6,
0x056d0,
0x04ae0,
0x0a9d4,
0x0a2d0,
0x0d150,
0x0f252, // 2090-2099
0x0d520,
], // 2100
其實(shí),這段代碼并不難以理解,它的每一個(gè)元素都是一個(gè) 16 進(jìn)制數(shù)。
我們將其轉(zhuǎn)化為二進(jìn)制可以發(fā)現(xiàn):
| xxxx | xxxx | xxxx | xxxx | xxxx | |
|---|---|---|---|---|---|
| 位數(shù) | 20-17 | 16-12 | 12-9 | 8-5 | 4-1 |
- 1-4 位: 表示當(dāng)年有無閏年,有的話,為閏月的月份,沒有的話,為0。
- 5-16 位:為除了閏月外的正常月份是大月還是小月,1為30天,0為29天。
- 注意:從 1 月到 12 月對(duì)應(yīng)的是第 16 位到第 5 位(而不是從第 5 位 到第 16 位)。
- 17-20 位: 1 和 0 分別表示閏月是 大月 還是 小月,大月 30 天,小月 29 天(僅當(dāng)存在閏月的情況下有意義)。
案例解讀
- 1980年 => 0x095b0
- 二進(jìn)制:
0000 1001 0101 1011 0000 - 1-4 位:
0000=> 表示1980年沒有閏月 - 16-5 位:
1001 0101 1011=> 表示1980年從1月到12月的天數(shù)依次為:30、29、29、30、29、30、29、30、30、29、30、30。 - 20-17 位:
0000=> 沒有閏月,所以無所謂閏大小月,該段代碼不考慮
- 二進(jìn)制:
- 1982年 => 0x0a974
- 二進(jìn)制:
0000 1010 1001 0111 0100 - 1-4 位:
0100=> 表示1982年的4月為閏月,即有第二個(gè)4月。 - 16-5 位:
1001 0101 1011=> 表示1982年從1月到13月的天數(shù)依次為:30、29、30、29、 29(閏四小月)、 30、29、29、30、 29、30、30、30。 - 20-17 位:
0000=> 閏月,0 為閏小月,得出4月是閏小月
- 二進(jìn)制: