MySQL 数据库中的位左移运算符<<是一种位操作符,用于将一个数的二进制表示向左移动指定的位数。
num << shift
其中,num是要移动的数,shift是要移动的位数。
mysql> SELECT 1<<2,4<<2; +------+------+ | 1<<2 | 4<<2 | +------+------+ | 4 | 16 | +------+------+
1 的补码为 0000 0001,左移两位之后变成 0000 0100,即整数 4;4 的补码为 0000 0100,左移两位之后变成 0001 0000,即整数 16。
例子 使用位左移运算符进行负数计算,SQL 语句如下:
mysql> SELECT -7<<2; +----------------------+ | -7<<2 | +----------------------+ | 18446744073709551588 | +----------------------+
-7 的补码为 60 个‘1’加 1001,左移两位之后变成 56 个‘1’加 1110 0100,即整数 18446744073709551588。
运算符 | 作用 | 使用形式 | 举例 | 说明 |
---|---|---|---|---|
| | 位或 | a | b | 5 | 8 | 1. 运算的两个二进制位有一个为 1 时,结果就为 1 2. 两个都为 0 时结果才为 0 |
& | 位与 | a & b | 5 & 8 | 1. 运算的两个二进制位都为 1 时,结果就为 1,否则为 0 注意:任何数和 -1 进行位与运算时,最终结果都为任何数本身的十进制数 |
^ | 位异或 | a ^ b | 5 ^ 8 | 1. 运算的两个二进制位不同时,结果为 1,相同时,结果为 0 |
~ | 位取反 | ~a | ~5 | 1. 就是做 NOT 操作,1 取反后变 0,0 取反后按指定值的补码形式进行左移,左移指定位数之后,左边高位的数值被移出并丢弃,右边低位空出的位置用 0 补齐 |
<< | 位左移 | a << b | 5 << 2,表示整数 5 按位左移 2 位 | 1. 按指定值的补码形式进行左移,左移指定位数之后,左边高位的数值被移出并丢弃,右边低位空出的位置用 0 补齐 |
>> | 位右移 | a >> b | 5 >> 2,表示整数 5 按位右移 2 位 | 1. 按指定值的补码形式进行右移,右移指定位数之后,右边低位的数值被移出并丢弃,左边高位空出的位置用 0 补齐。 |
总之,位左移运算符是一种位操作符,用于将一个数的二进制表示向左移动指定的位数。在 MySQL 中,位左移运算符的语法如下:num << shift。需要注意的是,位左移运算符的优先级较低,在使用时需要使用括号进行分组,以确保运算顺序正确。另外,需要注意的是,位左移运算符的结果可能会超出整数类型的范围,因此在使用时需要注意结果是否超出了整数类型的范围,以免出现意外的结果。