C语言位操作

c语言的位操作最常用的地方就是用在对寄存器的写值上。

一.基本的一些概念

1.位与:&

操作:1 & 1 = 1;  1 & 0 = 0;  0 & 0 = 0;

特点:只有全是1的时候才是1,其他情况都是0.

总结:任何数和0位与就是0,和1位与没有变化,所以位与常用在清零上(清零用位与)。

2.位或:|

操作:1 | 1 = 1;  1 | 0 = 1;  0 | 0 = 0;

特点:只有全0的时候才是0,其他情况都是1.

总结:任何数和1位或就是1,和0位或没有变化,所以位或常用在置1上(置1用位或)。

3.位取反:~

操作:~1 = 0;  ~0 = 1;

特点:1取反为0,0取反为1.

4.位异或:^

操作:1 ^ 1 = 0;  1 ^ 0 = 1; 0 ^ 1 = 1; 0 ^ 0 = 0;

特点:相同为0,不同为1.

总结:任何数和1位异或会取反,和0异或没有变化(特定位要取反就用位异或)。

5.左移(<<)和右移(>>)

操作的时候要考虑有符号数(signed number)和无符号数(unsigned number)。

对于有符号数:左移的时候右侧补0;右移的时候左侧补符号位(正数符号位为0,则补0;负数符号位为1,则补1).

对于无符号数:左移的时候右侧补0;右移的时候左侧也是补0.

注意:我们对寄存器进行赋值的时候用的都是无符号的数

二.与逻辑运算的区别

1.逻辑运算的基本符号:逻辑与(&&)  逻辑或(||)  逻辑取反(!)

2.我们需要注意的地方就是:位操作中只有1和0;逻辑操作的中非0代表是真(1),0就代表是假(0)

3.运算的时候,位运算是把数字拆为一位一位的进行运算的;逻辑运算是把数字作为一个整体进行运算的,但是他们运算的基本操作和位运算一致(譬如:1 && 1 = 1, 0 && 1 = 0 等等)。

譬如:7 && 0 = 0    111 & 0 = 0

7 && 3 = 1    111 & 011 = 011

三.对寄存器写值的三部曲

1.首先,把寄存器中的值读出来

2.其次,修改寄存器中的值

3.最后,把修改好的值写进去

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值