00000110
所以按位异或的结果就是6
在oracle中也没有按位异或的函数bitxor,但是可以通过bitand来实现。
bitxor(x,y)=bitor(x,y) - bitand(x,y) = (x + y) - BITAND(x, y) * 2所以bitxor(3,5)=3+5-2*1=6
说到这三种运算符,在oracle中也有它们的身影。
可以在utl_raw中得到,但是不同之处在于类型是raw,需要数据进制的转换。
SQL> desc utl_raw
FUNCTION BIT_AND RETURNS RAW
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
R1 RAW IN
R2 RAW IN
FUNCTION BIT_COMPLEMENT RETURNS RAW
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
R RAW IN
FUNCTION BIT_OR RETURNS RAW
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
R1 RAW IN
R2 RAW IN
FUNCTION BIT_XOR RETURNS RAW
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
R1 RAW IN
R2 RAW IN
举一个例子,还是以3 和 5 为运算量,这个时候需要用到hextoraw这个函数,这个函数是十六进制转换的函数。所以hextoraw(3)实际是
十六进制:3
十进制:3(3)
二进制:00011
同理,hextoraw(5)的二进制为101使用utl_raw得到的情况就是
select utl_raw.bit_and(hextoraw(3),hextoraw(5)) from dual
结果类似于使用bitand的结果 select bitand(3,5) from dual
二进制的运算都是有一定的实际使用意义的,在后续的博文中继续分享,欢迎关注。