简述:
A=~(BC); A|=(BC);
a为被修正数
b是修改后的位数
c是从第几个人开始修改的
可以读作。 a从c位开始,修正b位的a=~~(BC )。 该式将a从第c位开始的b位清零为a|=(BC ),该式将a从c位开始的b位设为公式解析:
int A=0x5a;
a=~(0x71;
将int设置为4字节
0x7: 000000000000000000000110 x 71336000000000000000000000001110~0x 71:111111111111111111111111111111111111111110 使我们请求后修改的位数为0,它和我们的操作数相位一定能把请求的位清零**a=~(0x71 )其实是a=a(~) (0x71 ) ) ** a:000000000000000000000001011010~0x 71:111111111111111111111111110001 a (() ((000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
我们再操作一次a|=(0x71 ); a=a|(0x71 )0x7: 00000000000000000001110 x 7133600000000000000000000000此时,将我们请求后要修改的位数设置为1。 这样就可以与我们的操作数相结合,使请求的位为1a:00000000000000000000000000 a|(0x 71 )。 0000000000000011110很明显,从1开始的3位数设置为1A:0x5e是根据上面的两个公式,我们可以合并得到的,被清除的地方是最好的。
全部为0的时候,我们想设定为h,h和清零的相或者
所以,如果修改后的位数超过两位数,或者不是单纯地变成1,而是随机确定的数的话
可以先清除,后放1
将显示以下代码:
` ` ` c demo _ code:# include ' stdio.h ' int main (void ) { int A=0x5a; a=~(0x70 ); //简单地将三位数转换为printf(%0x(n ),a ); a|=(0x11; //将第二位置设置为1printf('%0xn ',a ); int B=0xabcd; b=~(0xff0);//将从0到7的8位转换为printf('%0xn”,b ); b|=(0xab0 ); //在你之前的清除操作中,从0开始的这8位被清除了。 //因此,即使将ab和全部0的8位设为或,最终也不会成为abprintf('%0x(n ),b ); }