博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mysql 的位运算符详解,mysql的优先级
阅读量:6608 次
发布时间:2019-06-24

本文共 2219 字,大约阅读时间需要 7 分钟。

位运算是将给定的操作数转化为二进制后,对各个操作数每一位都进行指定的逻辑运算,得到的二进制结果转换为十进制数后就是位运算的结果。MySQL 5.0 支持6 种位运算符,如表4-4 所示。

  可以发现,位运算符中的位与“&”和位或“|”和前面介绍的逻辑与和逻辑或非常类似。其他操作符和逻辑操作有所不同,下面将分别举例介绍。

 “位与”对多个操作数的二进制位作逻辑与操作,例如2&3,因为2 的二进制数是10,3 是11,所有10&11 的结果是10,十进制数字还是2,来看实际结果:

mysql> select 2&3;+-----+| 2&3 |+-----+| 2 |+-----+1 row in set (0.00 sec)

可以对2 个以上操作数做或操作,测试一下2&3&4,因为4 的二进制是100,和上面的10做与操作100&010 后,结果应该是000,可以看实际结果为:

mysql> select 2&3&4;+-------+| 2&3&4 |+-------+| 0 |+-------+1 row in set (0.00 sec)

 “位或”对多个操作数的二进制位作逻辑或操作,还是上面的例子,2|3 的结果应该是10|11,结果还是11,应该是3,实际结果如下:

mysql> select 2|3;+-----+| 2|3 |+-----+| 3 |+-----+1 row in set (0.00 sec)

 “位异或”对操作数的二进制位做异或操作,10^11 的结果是01,结果应该是1,可以看实际结果为:

mysql> select 2^3;+-----+| 2^3 |+-----+| 1 |+-----+1 row in set (0.00 sec)

 “位取反”对操作数的二进制位作NOT 操作,这里的操作数只能是一位,下面看一个经典的取反例子:对1 做位取反,具体如下所示:

mysql> select ~1 ,~ 18446744073709551614;+----------------------+------------------------+| ~1 | ~ 18446744073709551614 |+----------------------+------------------------+| 18446744073709551614 | 1 |+----------------------+------------------------+1 row in set (0.00 sec)

结果让大家可能有些疑惑,1 的位取反怎么会是这么大的数字?来研究一下,在MySQL 中,常量数字默认会以8 个字节来表示,8 个字节就是64 位,常量1 的二进制表示为63 个“0”加1 个“1”,位取反后就是63 个“1”加一个“0”,转换为二进制后就是18446744073709551614,实际结果如下:

mysql> select bin(18446744073709551614);+------------------------------------------------------------------+| bin(18446744073709551614) |+------------------------------------------------------------------+| 1111111111111111111111111111111111111111111111111111111111111110 |+------------------------------------------------------------------+1 row in set (0.00 sec)

 “位右移”对左操作数向右移动右操作数指定的位数。例如100>>3,就是对100 的二进制数0001100100 右移3 位,左边补0,结果是0000001100,转换为二进制数是12,实际结果如下:

mysql> select 100>>3;+--------+| 100>>3 |+--------+| 12 |+--------+1 row in set (0.00 sec)

 “位左移”对左操作数向左移动右操作数指定的位数。例如100<<3,就是对100 的二进制数0001100100 左移3 位,右边补0,结果是1100100000,转换为二进制数是800,实际结果如下:

mysql> select 100<<3;+--------+| 100<<3 |+--------+| 800 |+--------+1 row in set (0.00 sec)

 

2.mysql 的优先级

 前面介绍了MySQL 支持的各种运算符的使用方法。在实际应用中,很可能将这些运算符进行混合运算,那么应该先进行哪些运算符的操作呢?表4-5 中列出了所有的运算符,优先级由低到高排列,同一行中的运算符具有相同的优先级。

 

 在实际运行的时候,可以参考表4-5 中的优先级。实际上,很少有人能将这些优先级熟练记忆,很多情况下我们都是用“()”来将需要优先的操作括起来,这样既起到了优先的作用,又使得其他用户看起来更加易于理解。

 

转载地址:http://dciso.baihongyu.com/

你可能感兴趣的文章
死锁和活锁
查看>>
js生成二维码
查看>>
去除input[type=number]的默认样式
查看>>
PowerDeigner 一个很好的画uml 和建模的软件
查看>>
vs2012创建mvc4项目部署iis所遇到的问题
查看>>
jenkins下载
查看>>
卫语句学习
查看>>
【php】对PHPExcel一些简单的理解
查看>>
文档统一用Word编写之Word写&发送邮件(Office2007)
查看>>
JavaScript的简单继承实现案例
查看>>
第六篇 VIM你值得拥有!
查看>>
项目管理学习笔记之八.课程总结
查看>>
setjmp与longjmp的分析
查看>>
generate ascii table
查看>>
2013吉林通化邀请赛 1005 GCD and LCM
查看>>
高淇java300集JAVA常用类作业
查看>>
<Linux命令行学习 第一节> CentOS在虚拟机的安装
查看>>
无Paper不论文
查看>>
mysql设置字符集CHARACTER SET
查看>>
redis 系列15 数据对象的(类型检查,内存回收,对象共享)和数据库切换
查看>>