我目前正在修读C课程,我们正在进行比特调整以包装日期。我理解移位的概念,但我对于移动的位置以及如何制作面具这些基本的东西感到茫然,所以我可以将它们拉回来。任何方向或推荐的阅读都会很棒。
我到目前为止: - (
#define DAY_MASK 0x???
#define DAY_OFFSET ?
#define MONTH_MASK 0x???
#define MONTH_OFFSET ?
#define YEAR_MASK 0x???
#define YEAR_OFFSET ?
由于
答案 0 :(得分:1)
假设您需要5位到数天,4位到月份,其余所有年份,例如:
#define DAY_OFFSET 0
#define MONTH_OFFSET 5
#define YEAR_OFFSET 9
#define DAY_MASK 0x1F
#define MONTH_MASK 0x1E0
#define YEAR_MASK (~0x1FF)
请注意我在年份中使用〜运算符,因此它可以在任何机器上运行(不考虑int的大小,除非它应该足够大以包含日期)
编辑:如果你(像我一样)对十六进制数字感觉不自然,你可以使用二进制文件:
#define DAY_MASK 0b11111
#define MONTH_MASK 0b111100000
#define YEAR_MASK (~0b111111111)
然后您可以清楚地看到每个字段使用哪些位。