作者blueblueChen (蓝蓝欠)
看板C_and_CPP
标题[问题] 宣告一个最小的 struct
时间Sun Aug 19 15:59:19 2018
最近去面试
有一题是考用最小的 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 呢?
感谢指教,多谢。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 219.68.215.61
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1534665561.A.5F6.html
1F:推 AstralBrain: time_t (完 08/19 16:43
2F:推 jerryh001: time_t正解 08/19 17:21
3F:推 chuegou: 同上面两位 08/19 23:39
4F:→ Killercat: 挑个小毛病 不过time_t不是struct XD 08/20 07:35
5F:→ Killercat: 要拿个struct把time_t包起来这样 :P 08/20 07:35
6F:→ lantw44: 可是 64-bit 的 time_t 是 8 bytes 似乎没有比较小? 08/20 23:53
7F:推 AstralBrain: 嗯.. 算了一下 原po只要存一千年的话5byte够用了 XD 08/21 01:41
8F:→ AstralBrain: 要拿来计算的时候前面补零就好 08/21 01:41
9F:推 xvid: 没提范围那用个32位元无号整数就好 08/21 10:04
10F:推 LPH66: 回应楼上的 5 byte, FAT 档案格式的时间戳总共也是 5 byte 08/21 19:01
11F:→ LPH66: 它的范围是 128 年, 精确到百分之一秒 08/21 19:01
12F:→ LPH66: 而且也是使用和原 PO 想法差不多的 bitfield 储存 08/21 19:02
13F:→ LPH66: 所以若精确度到秒, 一千年范围用 5 byte 是确定够用的 08/21 19:02
14F:推 LPH66: 话说回来, 原 PO 的秒数应该不会用到 2 byte 08/21 19:05
15F:→ LPH66: 除非是结构对齐要求, 所以理论上这就是 5 byte 的答案了 08/21 19:06
16F:→ blueblueChen: L大,因为它会自动对齐,秒数那边不管是char还是 08/25 09:22
17F:→ blueblueChen: 用 short 的 bitfield 都会占用2 byte 08/25 09:22