簡體   English   中英

如何在沒有多個掩碼的情況下使用更多值進行位操作?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM