看板 C_and_CPP 關於我們 聯絡資訊
我想請問一下,位移是把最高(低)位元移除,最低(高)位元補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的最高位元移位到其他變數嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.158.217 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1619597091.A.A13.html
nh60211as: C++ 用 std::bitset? 04/28 16:14
我是PIC用microchip的MPLAB,好像沒法include
MOONRAKER: 八次可以寫成一個for loop阿 04/28 16:30
我現在是一個for loop,0x80,0x40和>>7,>>6都是用變數 但只是想問看看有沒有比現在這方法更快的 ※ 編輯: IOP14759 (60.248.158.217 臺灣), 04/28/2021 16:34:52
FinanceBrain: 迴圈搭配bitset 就做到了.. 04/28 17:49
kobe8112: 你的快是指要少打幾個程式碼還是執行時間快? 04/28 18:17
oToToT: 建個表直接查? 04/28 20:17
chuegou: 組語的RLCF或RRCF 把最旁邊的bit移到carry flag 04/28 20:52
chuegou: 直接看carry flag來決定你的變數要填1還是0 04/28 20:52
chuegou: 我是覺得Y[i] = (X&(1<<i)) ? 1:0; 就夠簡單易懂了 04/28 21:00
chuegou: 阿 修正 不用再看carry flag 一律RLCF到空的暫存就是了 04/28 21:06
yoche2000: PIC? 純bitwise何不用他的 ASM 04/28 23:33
yuichanprpr: for(i=0;i<8;i++) Y[i] = (X&(1<<i))>>i; 04/29 00:02
EdisonX: for(i=0, m=1;i<8;i++, m<<=1) Y[i] = ((X&m)!=0); 04/29 02:26
暫時夠用了,感謝大家 ※ 編輯: IOP14759 (60.248.158.217 臺灣), 04/29/2021 09:13:14
joefaq: 看看用bitfield有沒有符合你的要求吧 04/30 15:43