[問題] 位元運算 循環式計算出位元

看板C_and_CPP (C/C++)作者 (就是愛希爾)時間12年前 (2013/07/09 01:51), 編輯推噓2(209)
留言11則, 6人參與, 最新討論串1/1
大家好,最近想要實踐一個功能 就是我用一個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
如果離開 for 的時候 jdx 只有 1 而不是 2 ,
07/09 02:07, 1F

07/09 02:08, , 2F
就代表現在已經是最後一個 state ,這時再去抓第一個出來,
07/09 02:08, 2F

07/09 02:08, , 3F
就可以完成循環了。
07/09 02:08, 3F

07/09 02:27, , 4F

07/09 11:58, , 5F
我的想法不同吶,這種案例可以直接針對原始資料直接做右旋
07/09 11:58, 5F

07/09 12:00, , 6F
1234 -> 4123 -> 3412 -> 2341 -> 1234 ( 應是叫右璇吧?)
07/09 12:00, 6F

07/09 12:26, , 7F
右旋沒錯,可以用>>, &, | 各一個做出來。
07/09 12:26, 7F

07/09 22:43, , 8F

07/09 22:44, , 9F
很笨的方法 要掃兩次 不曉得有沒有更好的方式呢? 謝謝
07/09 22:44, 9F

07/10 01:44, , 10F

07/10 01:47, , 11F
有 bug 改過才能動
07/10 01:47, 11F
文章代碼(AID): #1HslmMjg (C_and_CPP)
文章代碼(AID): #1HslmMjg (C_and_CPP)