c语言用位运算将一个数清零,C语言学习笔记_位运算

C语言学习笔记_位运算

知识点记录

基本位运算

按位与:全1为1,见0为0;与1相与无变化,与0相与变为0;可用于特定位清零

按位或:见1为1,全0为0;与1相或变为1,与0相或无变化;可用于特定位置1

异或:相同为0,不同为1;与1异或会取反,与0异或无变化;可用于特定位取反

移位运算

无符号数:左移右侧补0,右移左侧补0

有符号数:左移右侧补0,右移左侧补符号位

构造特定二进制数

unsigned int a, b;

a = (0x1<<3);//构造二进制数0000 …… 0000 1000

b = (0x1<<3) | (0x1<<6);//构造二进制数0000 …… 0100 1000

unsigned int c,d;

c = ~(0x1<<3);//构造二进制数1111 …… 1111 0111

d = ~((0x1<<3) | (0x1)<<6);//构造二进制数1111 …… 1011 0111

测试

给定一个整形数a,设置a的bit3~bit7,保持其他位不变。

a |= 0x1F<<3;

给定一个整形数a,清除a的bit15~bit23,保持其他位不变。

a &= ~(0x1FF<<15);

给定一个整形数a,取出a的bit3~bit8。

a = (a>>3) & 0x3F;

给一个寄存器的bit7~bit17中的值加17

unsigned int b;//定义临时变量

b = (a>>7) & 0x7FF;//获取bit7~bit17中的值

b += 17;//对原来的值增加17

a &= ~(0x7FF<<7);//对应位清零

a |= b<<7 ;//对应位赋值

给一个寄存器的bit7-bit17赋值937,同时给bit21-bit25赋值17。

a &= ~((0x7FF<<7) | (0x1F<<21));//对应位清零

a |= (937<<7) | (17<<21);//对应位赋值

用宏定义将32位数x的第n位置位

#define SET_BIT_N(x, n)(x | (1U<

用宏定义将32位数x的第n位清零

#define CLEAR_BIT_N(x, n)(x & ~(1U<

用宏定义将32位数x的第n位到第m位置位

#define GET_ALLONE_BITS(n, m)(~(~(0U)<

#define SET_BIT_N_M(x, n, m)(x | GET_ALLONE_BITS(n, m)<

截取变量x的第n到第m位

#define GET_BIT(x, n, m)(x>>(n-1) & GET_ALLONE_BITS(n , m))

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值