本文基于impala3.2版本,所有的内置位运算函数;
序号 | 语法类型/方法名称 | 输出类型 | 使用说明 |
---|---|---|---|
1 | bitand (integer_type a,same_type b) | 和输入类型一致 | 按位取与运算& |
2 | bitnot (integer_type a) | 和输入类型一致 | 按位取非运算~ |
3 | bitor (integer_type a,same_type b) | 和输入类型一致 | 按位取或运算| |
4 | bitxor (integer_type a,same_type b) | 和输入类型一致 | 按位取异或运算^ |
5 | countset (integer_type a) | 和输入类型一致 | 返回1的个数(默认) |
6 | countset (integer_type a , int zero_or_one) | 和输入类型一致 | 返回1或0的个数 |
7 | getbit (integer_type a , int postition ) | 和输入类型一致 | 获取指定位置的数字 |
8 | rotateleft (integer_type a , int postitions) | 和输入类型一致 | 循环移位(往左) |
9 | rotateright (integer_type a , int postitions) | 和输入类型一致 | 循环移位(往右) |
10 | setbit (integer_type a , int postition) | 和输入类型一致 | 设置指定位置为1(默认) |
11 | setbit (integer_type a , int postition , int zero_or_one ) | 和输入类型一致 | 设置指定位置为1或0 |
12 | shiftleft (integer_type a , int postition) | 和输入类型一致 | 逻辑移位(往左) |
13 | shiftright (integer_type a , int postition) | 和输入类型一致 | 逻辑移位(往右) |
示例如下:
①位运算函数对所有整型数据起作用:int , bigint , smallint , tinyint ;
②位运算函数中任何参数为null,则返回值为null;
③所有impala整型都是带符号的;
序号| 计算示例 | 计算过程 |输出结果
1 | bitand(12, 5) 00001100 & 00000101 4(00000100) --相同位置都为1的时候才会为1
2 | bitnot(16) ~00010000 -17(11101111)--0变1,1变0
3 | bitor(1, 4) 00000001 | 00000100 5(00000101) --只要有一个是1,就是1
4 | bitxor(0, 15) 00000000 ^ 00001111 15(00001111) --相同的位置为0,不相同的为1
5 | countset(17) 00010001 2 --返回整值的1的个数
6 | countset(17,0) 00010001 6 --返回整值的指定参数的个数(这里返回的0)
7 | getbit(1, 0) 00000001 1 --返回指定位置是0还是1(这里从右往左从0开始第一位是1)
8 | rotateleft(-127, 3) 10000001 -> 00001100 16 --这里是把整数位整体往左指定位(这个例子里面是3)
9 | rotateright(-127, 3)10000001 -> 00110000 48 --这里是把整数位整体往右指定位(这个例子里面是3)
10 | setbit(0, 3) 00000000 -> 00001000 8 --把整型指定位数变成1(从右往左从0开始)
11 | setbit(7, 2, 0) 00000111 -> 00000011 3 --把整型指定位数变成第三个参数(从右往左从0开始)
12 | shiftleft(127, 5) 01111111 -> 11100000 -32 --把整型往左移动指定的位数(超出的舍弃,用0在尾补充)
13 | shiftright(-1, 5) 11111111 -> 00000111 7 --把整型往右移动指定的位数(超出的舍弃,用0在尾补充)
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_43140586/article/details/115007374
内容来源于网络,如有侵权,请联系作者删除!