mysql 位_MySQL位运算符

MySQL位运算符

位运算符是在二进制数上进行计算的运算符。位运算会先将操作数变成二进制数,然后进行位运算,最后再将计算结果从二进制数变回十进制数。

MySQL的位运算符如下:

运算符

作用

|

按位或

&

按位与

^

按位异或

<<

按位左移

>>

按位右移

~

按位取反

按位或运算符“|”

“|”表示按位或。按位或运算时,数据库系统会先将十进制的操作数转换为二进制数,然后按对应的二进制数逐位进行逻辑或运算。对应的二进制位有一个或两个为1,则该位的运算结果为1;否则对应的二进制位有两个0时,该位的运算结果为0。

实例

使用按位或运算符“|”进行运算。SQL代码如下:

mysql>SELECT 10|15,9|4|2;

如下图所示:

0818b9ca8b590ca3270a3433284dd417.png

10的二进制数值为1010,15的二进制数值为1111,按位或运算之后,结果为1111,然后将二进制数1111转换为十进制数,即为整数15;

9的二进制数值为1001,4的二进制数值为0100,2的二进制数值为0010,按位或运算之后(先将9和4进行按位或运算,得出1101,再与2进行按位或运算,得出1111),结果为1111,然后将二进制数1111转换为十进制数,即为整数15。

按位与运算符“&”

“&”表示按位与。按位与运算时,数据库系统会先将十进制的操作数转换为二进制数,然后按对应的二进制数逐位进行逻辑与运算。对应的二进制位都为1,则该位的运算结果为1;否则,对应的二进制位有一个1或者都为0,则该位的运算结果为0。

实例

使用按位与运算符“&”进行运算。SQL代码如下:

mysql>SELECT 10&15,9&4&2;

如下图所示:

0818b9ca8b590ca3270a3433284dd417.png

10的二进制数值为1010,15的二进制数值为1111,按位与运算之后,结果为1010,然后将二进制数1010转换为十进制数,即为整数15;

9的二进制数值为1001,4的二进制数值为0100,2的二进制数值为0010,按位与运算之后(先将9和4进行按位与运算,得出0000,再与2进行按位与运算,得出0000),结果为0000,然后将二进制数0000转换为十进制数,即为整数0。

按位异或运算符“^”

“^”表示按位异或。按位异或运算时,数据库系统会先将十进制的操作数转换为二进制数,然后按对应的二进制数逐位进行逻辑异或运算。对应位的二进制数不同时,对应位的结果才为1;如果两个对应位数都为0或者都为1,则对应位的结果为0。

实例

使用按位异或运算符“^”进行运算。SQL代码如下:

mysql>SELECT 10^15,1^0,1^1;

如下图所示:

0818b9ca8b590ca3270a3433284dd417.png

10的二进制数值为1010,15的二进制数值为1111,按位异或运算以后,结果为0101,然后将二进制数0101转换为十进制数,即为整数5;1的二进制数值为0001,0的二进制数值为0000,按位异或运算以后,结果为0001;1和1本身二进制位完全相同,因此结果为0。

按位左移运算符“<

“<

实例

使用按位左移运算符“<

mysql>SELECT 1<<2,4<<2;

如下图所示:

0818b9ca8b590ca3270a3433284dd417.png

1的二进制数值为00000001,左移2位以后变成00000100,将二进制数值00000100转换为十进制数值后,即为整数4;十进制数值4左移2位以后变成00010000,将二进制数值00010000转换为十进制数值后,即为整数16。

按位右移运算符“>>”

“>>”表示按位右移。“m>>n”表示m的二进制数向右移n位,左边补上n个0。例如,二进制数011右移1位后变成001,最后一个1被移出去了,直接就不要了。

实例

使用按位右移运算符“>>”进行运算。SQL代码如下:

mysql>>SELECT 1>>1,16>>2;

如下图所示:

0818b9ca8b590ca3270a3433284dd417.png

1的二进制数值为00000001,右移1位以后变成00000000,将二进制数值00000000转换为十进制数值后,即为整数0;16的二进制数值为00010000,右移2位以后变成00000100,将二进制数值00000100转换为十进制数值后,即为整数4。

按位取反运算符“~”

“~”表示按位取反。数据库系统会先将十进制的操作数转换为二进制数,然后对每位都进行取反运算。1取反后变成0,0取反后变成1。

实例1

使用按位取反运算符“~”进行运算。SQL代码如下:

mysql>SELECT ~1;

如下图所示:

0818b9ca8b590ca3270a3433284dd417.png

对数字1进行按位取反后,结果变成了18446744073709551614。

因为在MySQL中常量是8个字节,每个字节是8位,那么一个常量就是64位。

数字1变成二进制数以后,是由64位构成的,最后一位是1,前面的63位是0。进行按位取反后,前63位的值是1,最后一位是0,这个二进制数最后转换为十进制数就是18446744073709551614。

使用BIN()函数可以查看二进制数。下面使用BIN()函数来查看常数1取反以后的二进制数结果,SQL代码如下:

mysql>SELECT BIN(~1);

如下图所示:

0818b9ca8b590ca3270a3433284dd417.png

MySQL经过位运算以后的数值是一个64位的无符号整数,1的二进制数值表示为最右边位为1,其它位均为0,取反操作以后,除了最低位(最右边的位)为0外,其它位均变为1。

实例2

使用按位取反运算符进行运算。SQL语句如下:

mysql>SELECT 5&~1;

如下图所示:

0818b9ca8b590ca3270a3433284dd417.png

逻辑运算“5&~1”中,由于位取反运算符“~”的级别高于位与运算符“&”,因此先对1取反操作,取反之后,除了最低位为0外,其它位都为1,然后再与十进制数值5进行与运算,结果为0100,将二进制数0100转换为十进制数以后,即为整数4。

提示

位运算都是在二进制数上进行的。我们输入的操作数可能是十进制数,数据库系统在进行位运算之前会将其转换为二进制数。等位运算完成后,再将这些数字转换回十进制数,而且,位运算都是对应位上运算,如数1的第一位只与数2的第一位进行运算,数1的第二位只与数2的第二位进行运算。

上文来自:http://www.baike369.com/content/?id=5576

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值