位运算符
Posted hiim
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了位运算符相关的知识,希望对你有一定的参考价值。
位运算符
位运算是对操作数以二进制比特(bit)位为单位进行的操作运算,位运算的操作数和结果都是整型数。几种位运算符和相应的运算规则如表所示。
运算符 | 用法 | 操作 |
---|---|---|
>> | op1>>op2 | 将op1右移op2个位(带符号) |
<< | op1<<op2 | 将op1左移op2个位(带符号) |
>>> | op1>>>op2 | 将op1右移op2个位(不带符号的右移) |
& | op1&op2 | op1和op2都是true,结果才为true |
⊙ | op1⊙op2 | op1和op2有一个是true,则结果为true |
^ | op1^op2 | op1和op2是不同值 |
注:⊙是 | 。因为markdown格式的原因,打上去显示不了。。。
【注意】对于&和|运算符,参与运算的两个运算量可以是逻辑值,也可以是数值数据。对于数值数据,将对两运算量按位对应计算,这时,1相当于true,0相当于false。这个位运算符没有前面逻辑符的附加特点。
移位运算符
移位运算是将某一变量所包含的各比特位按指定方向移动指定的位数。通过对第一个运算对象左移或右移右边的操作数的位数来对数据执行位操作。
移位运算符的例子:
x(十进制表示) | x的二进制补码表示 | x<<2 | x>>2 | x>>>2 |
---|---|---|---|---|
30 | 00011110 | 0111100 | 00000111 | 00000111 |
-17 | 11101111 | 10111100 | 11111011 | 00111011 |
补码最高位是符号位,0表示正数,1表示负数。所以在>>这个带符号右移的运算中,右移后左边留的空位又符号位数字补齐。而不带符号的右移中,右移后左边的空位一律填0。带符号的左移在后面补0。
按位逻辑运算
位运算符&,|,~,^分别提供了基于位的与,或,求反,异或操作。其中,异或是指两位值不同时,对应结果位为1,否则为0。
例:x=13,y=43
先将数据转换为二进制:x=00001101,y=00101011。
x=11110010,就是把00001101按位求反,得到11110010。然后这个形式是负数的补码形式,负数的补码是由正数的补码(原码)按位求反再加1,所以我们先对11110010求反,得到00001101,再减去1,得到00001100=14。所以x=14。
x&y=1001,即9。
以上是关于位运算符的主要内容,如果未能解决你的问题,请参考以下文章