C语言位运算

C语言位运算,第1张

位运算

& 特定位清0

|特定位置1

~ 特定位取反

^(位异或) 相异就是1

int main

{

int a = 45;

int b = ~a;

printf("%d\n", b);

}

b=-46

int main

{

unsigned int a = 45;

unsigned int b = ~a;

printf("%u\n", b);

}

b=4294967250

寄存器 *** 作原则:不影响其他位-通过读改写

特定位设置

bit3~bit7设置位1(0x1F<<3)(0b11111<<3)

bit4~bit10设置为1(0xF<<0)|(0xfffff8<<11)

或者先构造bit4~bit10设置为0,然后按位取反~(0x7f<<4)

设置a的bit3

a |= (1<<3);

清除a的bit15 a&=(~(1<<15))

读取:取出bit3~bit8

第一步先将bit3~bit8不变,其他全部清0,第二步右移3位

a&=(0x3F<<3)

a>>=a3

赋值:给bit7~bitbit17赋值937(写入要先清0,再写入)

第一步先将bit7~bit17清0,再将937写入bit7~bit17

a&=~(0x3FF<<7) //清0

a|=(937<<7) //写入

读改写:给bit7~bit17加17

第一步:先读出来,int tmp =a&(3F<<7); tmp>>=7;

第二步,加17 tmp+=17;

第三步,给bit7~bit17清0 a&=~(0x3F<<7)

第四步,将第二步的数写入bit7~bit17 a|=tmp<<7;

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1325653.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-12
下一篇2022-06-12

发表评论

登录后才能评论

评论列表(0条)

    保存