[問題] 位元運算 循環式計算出位元
大家好,最近想要實踐一個功能
就是我用一個16位元int (current_state)表示16個選項
int current_state = 0x16c1; //0001 0110 1100 0001
假設目前選項是第六個,那我想要計算下一個選項的位元(第七個)
又能有循環的效果,就是第十二個完下一個變成第0個
下一個變成第六個這樣下去
目前只能選下一個,不過不能夠變成循環式的
int current_bit = 6; //6->7->9->10->12->0->6->7->..
想問大家用什麼技巧可以達成呢?
謝謝!!
[程式如下]:
#include <stdio.h>
#define BIT(x) ((1 << x))
int Calculation(int b, int current_bit)
{
int idx = 0, jdx = 0;
int chose_bit = 0;
int mask = BIT(current_bit);
printf("mask = 0x%x\n", mask);
for (idx = 0; idx < 16; ++idx) {
if ((b & mask) != 0) {
jdx++;
if(jdx == 2)
break;
}
else
;
mask <<= 1;
}
chose_bit = current_bit + idx;
printf("chose_bit = %d\n", chose_bit);
return chose_bit;
}
int main(void)
{
int current_state = 0x16c1; //0001 0110 1100 0001
int next_bit = 0;
int current_bit = 6; //6->7->9->10->12->0->6->7->...
printf("current_state = 0x%x\n", current_state);
next_bit = Calculation(current_state, current_bit);
printf("\nnext_bit = %d\n", next_bit);
return 0;
}
Linux OS
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.168.189.60
推
07/09 02:07, , 1F
07/09 02:07, 1F
→
07/09 02:08, , 2F
07/09 02:08, 2F
→
07/09 02:08, , 3F
07/09 02:08, 3F
推
07/09 02:27, , 4F
07/09 02:27, 4F
→
07/09 11:58, , 5F
07/09 11:58, 5F
→
07/09 12:00, , 6F
07/09 12:00, 6F
→
07/09 12:26, , 7F
07/09 12:26, 7F
→
07/09 22:43, , 8F
07/09 22:43, 8F
→
07/09 22:44, , 9F
07/09 22:44, 9F
→
07/10 01:44, , 10F
07/10 01:44, 10F
→
07/10 01:47, , 11F
07/10 01:47, 11F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章