如何在没有多个掩码的情况下对更多值进行位操作?
How to do bitmanipulation with more values without multiple masks?
我有这个任务,但我不知道该怎么做,简单的 google 对我没有帮助。也不确定要搜索什么。
但我正在创建一个包含小时、分钟和秒的时钟/手表。
我要使用的位掩码是:
0000 0000 mask1
hhhh mmmm
0000 0000 mask2
mmss ssss
到目前为止我的理解是小时位的数量是适合从 0 -> 11 的 12 个选项的原因。
以及 6 位的分钟和秒为 0 -> 59.
几个小时以来,我有点在黑暗中为每个可能的小时创建 12 个单独的位掩码。完成后,我意识到我还必须这样做几分钟和几秒钟,这将是 120 行不必要的代码。
这是我做的:
TIME_11_HOUR = 240, //1111
TIME_10_HOUR = 224, //1110
TIME_9_HOUR = 192, //1100
TIME_8_HOUR = 160, //1010
TIME_7_HOUR = 144, //1001
TIME_6_HOUR = 112, //0111
TIME_5_HOUR = 96, //0110
TIME_4_HOUR = 80, //0101
TIME_3_HOUR = 64, //0100
TIME_2_HOUR = 48, //0011
TIME_1_HOUR = 32, //0010
TIME_0_HOUR = 16 //0001 0000
我认为解决方案与移位有关,但我不太确定该怎么做。
任何人都可以给我一个将 0001(0 小时)更改为 1010(8 小时)的示例,以便我可以在我的代码中实现它并自己弄清楚。
假设所有值都在范围内并使用 unsigned
类型...
取消编码
hour = (encodedtime & 0xf000) >> 12;
minute = (encodedtime & 0xfc0) >> 6;
second = encodedtime & 0x3f;
编码
encodedtime = (hour << 12) | (minute << 6) | second;
我有这个任务,但我不知道该怎么做,简单的 google 对我没有帮助。也不确定要搜索什么。
但我正在创建一个包含小时、分钟和秒的时钟/手表。 我要使用的位掩码是:
0000 0000 mask1
hhhh mmmm
0000 0000 mask2
mmss ssss
到目前为止我的理解是小时位的数量是适合从 0 -> 11 的 12 个选项的原因。 以及 6 位的分钟和秒为 0 -> 59.
几个小时以来,我有点在黑暗中为每个可能的小时创建 12 个单独的位掩码。完成后,我意识到我还必须这样做几分钟和几秒钟,这将是 120 行不必要的代码。
这是我做的:
TIME_11_HOUR = 240, //1111
TIME_10_HOUR = 224, //1110
TIME_9_HOUR = 192, //1100
TIME_8_HOUR = 160, //1010
TIME_7_HOUR = 144, //1001
TIME_6_HOUR = 112, //0111
TIME_5_HOUR = 96, //0110
TIME_4_HOUR = 80, //0101
TIME_3_HOUR = 64, //0100
TIME_2_HOUR = 48, //0011
TIME_1_HOUR = 32, //0010
TIME_0_HOUR = 16 //0001 0000
我认为解决方案与移位有关,但我不太确定该怎么做。
任何人都可以给我一个将 0001(0 小时)更改为 1010(8 小时)的示例,以便我可以在我的代码中实现它并自己弄清楚。
假设所有值都在范围内并使用 unsigned
类型...
取消编码
hour = (encodedtime & 0xf000) >> 12;
minute = (encodedtime & 0xfc0) >> 6;
second = encodedtime & 0x3f;
编码
encodedtime = (hour << 12) | (minute << 6) | second;