位运算符&移位运算符
位运算符
按位操作符用来操作整数基本数据类型中的单个比特(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