[问题] 宣告一个最小的 struct

楼主: blueblueChen (蓝蓝欠)   2018-08-19 15:59:19
最近去面试
有一题是考用最小的 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
同上面两位
作者: Killercat (杀人猫™)   2018-08-20 07:35: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 的答案了
楼主: blueblueChen (蓝蓝欠)   2018-08-25 09:22:00
L大,因为它会自动对齐,秒数那边不管是char还是用 short 的 bitfield 都会占用2 byte

Links booklink

Contact Us: admin [ a t ] ucptt.com