0

我有这个任务,我不知道该怎么做,一个简单的谷歌不会帮助我。也不完全确定要搜索什么。

但我正在创建一个包含小时、分钟和秒的时钟/手表。我使用的位掩码是:

0000 0000 mask1
hhhh mmmm
0000 0000 mask2
mmss ssss

到目前为止,我所理解的是,小时位的数量是适合 0 -> 11 的 12 个选项的原因。而 0 -> 59 的分钟和秒的 6 位。

几个小时以来,我有点在黑暗中为每个可能的小时创建 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 小时)的示例,以便我可以在我的代码中实现它并自己解决。

4

1 回答 1

2

假设所有值都在范围内并使用unsigned类型...

取消编码

hour = (encodedtime & 0xf000) >> 12;
minute = (encodedtime & 0xfc0) >> 6;
second = encodedtime & 0x3f;

编码

encodedtime = (hour << 12) | (minute << 6) | second;
于 2020-04-22T09:29:21.430 回答