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

本文介绍如何利用PL/SQL编写函数,实现对整数二进制表示中指定位置的位进行设置,支持设置为0或1的操作。通过示例代码演示了函数实现细节,并提供了测试用例验证其正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

转载于:http://blog.itpub.net/18922393/viewspace-730101/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值