最近去面試
有一題是考用最小的 struct去存 年月日分秒 ,假設2015,可以用 15來表示
我當時寫不出來。回來練習的時候,我是這樣宣告
struct Date {
unsigned short year : 10 //假設最大 999,需要10個bit
unsigned short month : 4 //最大12,只要4個bit
unisgned short : 2 //pendding 2 個 bit
unsigned short day : 5 //最大31,需要5個bit
unsigned short hour : 5 //最大23,需要5個bit
unsigned short minute : 6 //最大60,需要6個bit
unsigned char second //不管是 char 還是 short 都會再多兩個 byte
} date
sizeof(date) = 6 byte
這是我的答案,請問還有沒有更小的 struct 呢?
感謝指教,多謝。
作者: AstralBrain 2018-08-19 16:43:00
time_t (完
作者: jerryh001 2018-08-19 17:21:00
time_t正解
作者:
chuegou (chuegou)
2018-08-19 23:39:00同上面兩位
挑個小毛病 不過time_t不是struct XD要拿個struct把time_t包起來這樣 :P
作者:
lantw44 (#######################)
2018-08-20 23:53:00可是 64-bit 的 time_t 是 8 bytes 似乎沒有比較小?
作者: AstralBrain 2018-08-21 01:41:00
嗯.. 算了一下 原po只要存一千年的話5byte夠用了 XD要拿來計算的時候前面補零就好
作者:
xvid (DivX)
2018-08-21 10:04:00沒提範圍那用個32位元無號整數就好
作者:
LPH66 (-6.2598534e+18f)
2018-08-21 19:01:00回應樓上的 5 byte, FAT 檔案格式的時間戳總共也是 5 byte它的範圍是 128 年, 精確到百分之一秒而且也是使用和原 PO 想法差不多的 bitfield 儲存所以若精確度到秒, 一千年範圍用 5 byte 是確定夠用的話說回來, 原 PO 的秒數應該不會用到 2 byte除非是結構對齊要求, 所以理論上這就是 5 byte 的答案了
L大,因為它會自動對齊,秒數那邊不管是char還是用 short 的 bitfield 都會占用2 byte