Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1702857
  • 博文数量: 136
  • 博客积分: 10021
  • 博客等级: 上将
  • 技术积分: 3261
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-22 11:26
文章分类

全部博文(136)

文章存档

2010年(1)

2009年(26)

2008年(109)

我的朋友

分类: Oracle

2009-07-01 20:24:53

Oracle提供了一种按位操作的函数:bitand,进行逻辑“与”运算。由此可以写出逻辑“或”运算和逻辑“异或”运算。下面做几个小测试。
 
1. bitand
 
-- 6 = 0110
-- 7 = 0111
-- 13 = 1101
SQL> select bitand(6,13) from dual;
 
BITAND(6,9)
-----------
          4
 
SQL> select bitand(7,13) from dual;
 
BITAND(7,9)
-----------
          5
 
 
2. bitor
 
SQL> CREATE OR REPLACE FUNCTION bitor (n1 NUMBER, n2 NUMBER) RETURN NUMBER
  2  IS
  3    n1_tmp NUMBER := trunc(n1);
  4    n2_tmp NUMBER := trunc(n2);
  5  BEGIN
  6    RETURN n1_tmp + n2_tmp - bitand(n1_tmp, n2_tmp);
  7  END;
  8  /
 
Function created
 
-- 6 = 0110
-- 13 = 1101
SQL> select bitor(6,13) from dual;
 
BITOR(6,13)
-----------
         15
 
-- 6 = 0110
-- 2 = 0010
SQL> select bitor(6,2) from dual;
 
BITOR(6,2)
-----------
         6
 
 
3. bitxor
 
SQL> CREATE OR REPLACE FUNCTION bitxor (n1 NUMBER, n2 NUMBER) RETURN NUMBER
  2  IS
  3    n1_tmp NUMBER := trunc(n1);
  4    n2_tmp NUMBER := trunc(n2);
  5  BEGIN
  6    RETURN n1_tmp + n2_tmp - bitand(n1_tmp, n2_tmp)*2;
  7  END;
  8  /
 
Function created
 
-- 6 = 0110
-- 13 = 1101
SQL> select bitxor(6,13) from dual;
 
BITXOR(6,13)
------------
          11
 
-- 6 = 0110
-- 2 = 0010
SQL> select bitxor(6,2) from dual;
 
BITXOR(6,2)
-----------
          4
 
 
参考:
阅读(2712) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~