ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 实现整数二进制指定位置为0或1

实现整数二进制指定位置为0或1

原创 Linux操作系统 作者:redhouser 时间:2012-05-18 09:48:04 0 删除 编辑

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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-05-26

  • 博文量
    211
  • 访问量
    790632