《C和指针》笔记3:置一和清零

在C语言中,移位运算符<<>>表示二进制数左移或右移,我们可以利用它们很轻松地对变量中单个位进行置一和清零。

我们可以规定变量二进制数最右边一位是第0位,定义bit_number是0,对应地,从最右边一位往左数第n位,对应的bit_number是n-1。

在这里插入图片描述
上图是举个例子,

置一

我们如果需要把bit_number对应的数变为1,可以这样写:

value |= 1 << bit_number;

等价于:

value = value | ( 1 << bit_number );

利用1 << bit_number将1移动到bit_number对应的位上。
比如1<<2;我们得到:

在这里插入图片描述
再和value中的值相或,value中除了bit_number对应的位上的数变为1,其他可以保持不变,原理是或的属性:

1|1=1
1|0=1
0|a=a (a=0或a=1)

在这里插入图片描述

清零

我们如果需要把bit_number对应的数变为0,可以这样写:

value &= ~ ( 1 << bit_number );

等价于:

value = value & ( ~ ( 1 << bit_number ) );

利用1 << bit_number将1移动到bit_number对应的位上,再取非,把位上的0变成1,1变成0。
比如~(1<<2);我们得到:

在这里插入图片描述

再和value中的值相与,value中除了bit_number对应的位上的数变为0,其他可以保持不变,原理是或的属性:

0&1=0
0&0=0
1&a=a (a=0或a=1)

在这里插入图片描述
这里还用到了一些位操作符:

  • AND: &
  • OR: |
  • XOR: ^

其运算规则为

在这里插入图片描述

另外一个比较少见的运算符是~,它的作用是对整型类型的操作数进行求补操作,操作数中所有原先为1的位变为0,所有原先为0的位变为1。

摘录自:《C和指针》71

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值