[問題] bit位移請教

作者: IOP14759 (iop14759)   2021-04-28 16:04:46
我想請問一下,位移是把最高(低)位元移除,最低(高)位元補0
假設有一個變數X=0xA5,我想要只取被移除的值
讓結果得到Y[8]={1,0,1,0,0,1,0,1},我該怎麼寫?
我現在的方式是
Y[0]=X&0x80; Y[0]=Y[0]>>7;
Y[1]=X&0x40; Y[1]=Y[1]>>6;
Y[2]=X&0x20; Y[2]=Y[2]>>5;...總共重覆8次
有辦法直接把X的最高位元移位到其他變數嗎?
作者: nh60211as   2021-04-28 16:14:00
C++ 用 std::bitset?
作者: MOONRAKER (㊣牛鶴鰻毛人)   2021-04-28 16:30:00
八次可以寫成一個for loop阿
作者: FinanceBrain (heaven)   2021-04-28 17:49:00
迴圈搭配bitset 就做到了..
作者: kobe8112 (小B)   2021-04-28 18:17:00
你的快是指要少打幾個程式碼還是執行時間快?
作者: oToToT (屁孩)   2021-04-28 20:17:00
建個表直接查?
作者: chuegou (chuegou)   2021-04-28 20:52:00
組語的RLCF或RRCF 把最旁邊的bit移到carry flag直接看carry flag來決定你的變數要填1還是0我是覺得Y[i] = (X&(1<<i)) ? 1:0; 就夠簡單易懂了阿 修正 不用再看carry flag 一律RLCF到空的暫存就是了
作者: yoche2000 (Sushi Desu! 在下壽司)   2021-04-28 23:33:00
PIC? 純bitwise何不用他的 ASM
作者: yuichanprpr (有以ちゃん)   2021-04-29 00:02:00
for(i=0;i<8;i++) Y[i] = (X&(1<<i))>>i;
作者: EdisonX (卡卡獸)   2021-04-29 02:26:00
for(i=0, m=1;i<8;i++, m<<=1) Y[i] = ((X&m)!=0);
作者: joefaq (小瑜)   2021-04-30 15:43:00
看看用bitfield有沒有符合你的要求吧

Links booklink

Contact Us: admin [ a t ] ucptt.com