oracle位与或等比特运算

在oracle中 位运算的函数只有bitand(与运算),可以通过该函数构造其他的位运算函数。

1) 与and

     自有函数bitand ,这个好理解(bit(位)and(与)).
     SQL> select bitand(2,4) from dual;
     BITAND(2,4)
     -----------
              0
     2=010(补码),4=100(补码) ,与之后等于0.

2) 或or

bitor(a,b)=a+b-bitand(a,b)

建立自定义函数bitor

create or replace function bitor(a in number,b in number) return number is
  Result number;
begin
  Result:= a+b-bitand(a,b);
  return(Result);
end bitor;

SQL> select bitor(2,4) from dual;
BITOR(2,4)
----------
         6

3)异或xor

bitxor(a,b)=a+b-2*bitand(a,b);

create or replace function bitor(a in number,b in number) return number is
  Result number;
begin
  Result:= a+b-bitand(a,b);
  return(Result);
end bitor;

SQL> select bitxor(2,10) from dual;
BITXOR(2,10)
------------
           8

4)整体左移b位

a*power(2,n);

create or replace function bitmoveleft(a in number, b in number) return number is
  Result number;
begin
   Result := a*power(a,b);
  return(Result);
end bitmoveleft;

SQL> select bitmoveleft(3,1) from dual;
BITMOVELEFT(3,1)
----------------
               6

5)整体右移b位

floor(a/power(2,n))
create or replace function bitmoveright(a in number, b in number) return number is
  Result number;
begin
  Result :=floor(a/power(a,b));
  return(Result);
end bitmoveright;

SQL> select bitmoveright(7,1) from dual;

BITMOVERIGHT(7,1)
-----------------
                3

6) 任意设置某位(position )为1或0

create or replace function setbit(olddata in number, position in number, value in number) return number is
  Result number;
begin
   if value=1 then
       Result:= bitor (olddata,power(2,position-1));
   else
       Result:= bitand(olddata,bitxor(-1,power(2,position-1)));
   end if;
  return(Result);
end setbit;

SQL> select setbit(7,2,0) from dual;

SETBIT(7,2,0)
-------------
            5

SQL> select setbit(8,2,1) from dual;

SETBIT(8,2,1)
-------------
           10


 
Oracle数据库中支持多种运算操作符,用于处理二进制数据。下面是一些常用的运算操作符: 1. 运算符(&):对两个二进制数的每一进行与操作,只有当两个对应都为1时,结果才为1。 示例:SELECT 5 & 3 FROM dual; -- 输出结果为1,因为5的二进制表示为101,3的二进制表示为011,进行运算后得到001,转换为十进制即为1。 2. 运算符(|):对两个二进制数的每一进行或操作,只有当两个对应都为0时,结果才为0。 示例:SELECT 5 | 3 FROM dual; -- 输出结果为7,因为5的二进制表示为101,3的二进制表示为011,进行运算后得到111,转换为十进制即为7。 3. 异或运算符(^):对两个二进制数的每一进行异或操作,只有当两个对应不相同时,结果才为1。 示例:SELECT 5 ^ 3 FROM dual; -- 输出结果为6,因为5的二进制表示为101,3的二进制表示为011,进行异或运算后得到110,转换为十进制即为6。 4. 按取反运算符(~):对一个二进制数的每一进行取反操作,将0变为1,将1变为0。 示例:SELECT ~5 FROM dual; -- 输出结果为-6,因为5的二进制表示为101,进行按取反运算后得到...11111111111111111111111010,转换为十进制即为-6。 这些运算操作符可以用于处理二进制数据的级操作,但在实际应用中要谨慎使用,确保理解运算符的含义和操作规则。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值