位运算符&移位运算符

位运算符

按位操作符用来操作整数基本数据类型中的单个比特(bit),就是二进制,按位操作符会对两个参数中对应的位(bit)执行布尔运算,最终生成一个结果。下面我们来看一下都有哪些位运算符。

ok,有人看了之后可能会问,与、或、异或这三个符号不是逻辑运算符吗,怎么又成了位运算符? 其实,我们知道,任何信息在计算机中都是以二进制的形式保存的,既然它们可以对布尔值进行运算,那么”&”、“|”、“^”除了可以作为逻辑运算符就也可以作为位运算符了。位运算是直接对二进制进行运算。他们对两个操作数中的每一个二进制位都进行运算。 首先,我们先将规律罗列出来:

可以把1当做true 0当做false
只有参与运算的两位都为1,&运算的结果才为1,否则就为0。 
只有参加运算的两位都是0,| 运算的结果才是0,否则都是1。
只有参加运算的两位不同,^ 运算的结果才为1,否则就为0。

单单这么看,大家可能还不知道怎么回事,我们来举几个例子。 1.& 与运算

这样是不是就很清晰了呢?

2.| 或运算

3.^ 异或运算

4.取反操作 其实,表面上看起来,取反操作是一个比较难理解的操作。但实际上,取反操作还是相对简单的。 我们有一个清晰的思路,那就是将一个十进制数表示为二进制数,然后对其取反,也就是将二进制数的1变成0,0变成1。 但是,我们面对这个问题,出现的情况是多种的,这个思路还不足以满足要求,让我们来看看具体的操作流程。 流程如下:

1.先将这个数的原码写出来,如果是正数,则二进制数最高位写0,负数则是1
2.求出这个二进制数的补码,正数的补码是其本身,负数的补码计算方法是:最高位数值不变,其余位求反,再按照正常的加法操作加1。
3.对补码进行求反
4.求反后的补码按照正常的减法操作减1(注意二进制是满二进一)
5.对除去当前二进制数最高位的其余位数进行求反
6.求出最终的值,最高位代表的是当前数字的正(0)负(1)号

这个操作方法亲测可用,这只是其中的一个方法,大家可以搜索一下其他的方法。

移位操作符

<< 左移、>> 右移、>>> 无符号右移 移位操作符有如上几种。 对于这部分,我不做过多的解释,用几个图来表示一下就可以了。

1.<<左移 栗子:6<<2

也就是说,左移符号左边是操作数,右边是移动的位数,左移动的两位数丢弃,空余出来的右侧用0来补充,所以,左移位数越多,数字是越大的。

2.>>右移 栗子:6>>2

右移操作符有两种情况,当操作数的最高位是1时,空余位补1,是0时补0。

3.>>>无符号右移 无符号右移的情况和右移类似,只是,这种移动方法,无论操作数二进制数最高位是0还是1,空余位都补0。

结语

感谢您的阅读,欢迎指正博客中存在的问题,也可以跟我联系,一起进步,一起交流!

微信公众号:进击的程序狗 邮箱:roobtyan@aliyun.com 个人博客:https://roobtyan.github.io

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券