![](/img/trans.png)
[英]How do you use bitwise operators, masks, to find if a number is a multiple of another number?
[英]How to do bitmanipulation with more values without multiple masks?
我有這個任務,我不知道該怎么做,一個簡單的谷歌不會幫助我。 也不完全確定要搜索什么。
但我正在創建一個包含小時、分鍾和秒的時鍾/手表。 我使用的位掩碼是:
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 小時)的示例,以便我可以在我的代碼中實現它並自己解決。
假設所有值都在范圍內並使用unsigned
類型...
取消編碼
hour = (encodedtime & 0xf000) >> 12;
minute = (encodedtime & 0xfc0) >> 6;
second = encodedtime & 0x3f;
編碼
encodedtime = (hour << 12) | (minute << 6) | second;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.