實現整數二進位制指定位置為0或1

redhouser發表於2012-05-18

1,需求:
   使用PL/SQL實現整數二進位制指定位置為0或1,用函式表示:
   r = f(src,pos,0_or_1)
   r:設定結果
   f:實現設定的函式
   src:原值
   pos:指定位置,取值power(2,x);如1表示二進位制倒數第1位,4表示二進位制倒數第3位,8表示二進位制倒數第4位
   o_or_1:設定為0或1,取值0、1

2,實現:

create or replace function setbit01(src in int,pos in int,setbit0_1 in int) return int
as
begin
-- src:需要設定的原始值
-- pos:需要設定的位,應為power(2,x),1,2,4,8
-- setbit0_1:pos對應位置置為0還是1
   if setbit0_1 = 0 then
     if bitand(src,pos)= 0 then
       return src;
     else
       return src - pos;
     end if;
   elsif setbit0_1 = 1 then
     if bitand(src,pos)= 0 then
       return src + pos;
     else
       return src;
     end if;
   else
      return 0;
   end if;
end;
/

3,測試
WITH v AS
 (SELECT (CASE
           WHEN rownum - 1 = 65 THEN
            NULL
           ELSE
            rownum - 1
         END) act_type
    FROM dual
  CONNECT BY LEVEL <= 66)
SELECT act_type,
       setbit01(act_type, 1, 0) AS act_type_1_0,
       setbit01(act_type, 1, 1) AS act_type_1_1,
       setbit01(act_type, 2, 0) AS act_type_2_0,
       setbit01(act_type, 2, 1) AS act_type_2_1,
       setbit01(act_type, 4, 0) AS act_type_4_0,
       setbit01(act_type, 4, 1) AS act_type_4_1
  FROM v
 ORDER BY 1;
SELECT setbit01(NULL, 1, 1) FROM dual;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18922393/viewspace-730101/,如需轉載,請註明出處,否則將追究法律責任。

相關文章