首页 > Linux操作系统 > Linux操作系统 > 求一個數由2的次冪數的和
/**求一個數由的次冪數的和*/
declare @mask int
declare @n int
set @n = 9 -- 这里就是输 入的参 數
--set @mask = 0x40000000 --可轉換成位的二進制
--set @mask =67108864 --這里是根據進制位移的辦法.@mask只要是比@n大的的次方數就行
set @mask =16
while @mask >0
begin
if( @mask & @n <> 0) --這里用到了兩個二進制相與
print @mask
set @mask = @mask/2
end
-----------------------------------------------------------------------------------
下面是效率更好也更容易理解的函數
alter function fn_Num(@Num int)
returns @T Table(Num int)
as
begin
declare @Num2 int
set @Num2=1
while @Num2<=@Num
begin
if @Num2&@Num<>0
insert @T select @Num2
set @Num2=@Num2*2
end
return
end
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7899089/viewspace-611572/ ,如需转载,请注明出处,否则将追究法律责任。