初入按位运算符和位移运算符

本文详细介绍了位运算符,包括取反运算符`~`、按位与`&`、按位或`|`和按位异或`^`,以及它们在编程中的应用,如掩码、开启/关闭位、切换位和检查位。同时,讨论了移位运算符`<<`和`>>`,阐述了它们在数值扩展和位移中的作用。
摘要由CSDN通过智能技术生成

前言

包括逻辑运算符和位移运算符
按位逻辑运算符作用于整数类型和char类型,并且只针对一个位而不是整个的数据。

取反运算符‘~’

unsigned char a = 2;//00000010
所以~ a位=为11111101
和乘法类似,不改变原来数据的值,但是会产生一个新值。

按位与‘&’

(1101) & (0111) = (0101)
对每一个位都取一个反,结果就是每一位的结果

还有一个缩写的形式,a &= (0111)

按位或‘|’

和上面的都差不多,也有缩写

按位异或‘^’

这个其实和上面都一样,但是异或可能并不是很常见
真值表:
0 0 0
1 0 1
0 1 1
1 1 0
即相同为0,不同为1

用途

1.掩码

首先明白一下与运算的性质,首先只要有一个输入是0,那么结果就是0;如果一个结果是1,那么输出的决定权就在另一个数据上,所以我们可以利用这一性质来隐藏一些位数(0)和显示一些位数(1)。

常用的掩码如oxff或者是0377(二进制编码都是1111 1111),其他的位数都是0。
之前也好奇一个问题,如果两个数据 二进制位数不相同,那么我们相与的结果会是怎么样的呢?
答案是会补全少的那个,当然是用0来补了。所以才有其他位数是0 说法。

2.打开位/设置位

(默认0叫关闭,1为打开)
有时候,我们需要改变一个数据的一特定位来实现某一个功能(比如打开音响需要将一个数据的一号位置为1,别问这个例子怎么回事,反正书上给的),那么就需要或运算符了。

或运算符只要有一个为1,则整体为1;而如果有一个是0,那么输出结果就只看剩下一位了。

所以,如果是打开一号位,我们可以采取或0000 0010的方式来实现(注意最右边的一个是0号位

3.关闭位/清空位

和上面的例子差不多,不过我们采用的不是或,因为我们想基于上面的输入来实现。
0000 0010来实现关闭一号位,所以我们需要将该输入取反,那么此时就需要与运算了。
所以就是采用与非门的方式,即a &= ~b(b为输入)

4.切换位

在已打开和关闭的位之间进行切换。我们可以采用异或的方式,将该位和1异,即可得到结果。
所以只需要一个掩码即可实现需求。

5.检查位

需要先用与上掩码的方式将剩下的位掩盖,然后再和该掩码相比较。

移位运算符

将数值位进行移动,左移’<<‘和右移’>>’
如0010 << 2 = 1000,数值向右移动两位相当于是乘22,,也就是扩大四倍。
还有简化版:a <<= 2;的形式

如果在扩大或者缩小的过程中位数不够怎么办?
左移是直接舍弃多余的位数,将空出来的圈零顶位;
右移则是将右侧多余的舍弃,将空出来的圈零。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值