[问题] 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