c-如何在没有多个掩码的情况下使用更多值进行位操作



我有这个任务,我不知道如何做,简单的谷歌对我没有帮助。也不知道该搜索什么。

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

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;

最新更新