如何创建和使用按位移位功能

时间:2012-12-08 18:40:40

标签: bit-shift brightscript

没有<<或>>运算符与我正在使用的语言(Brightscript)。我想创建一个按位移位函数,其工作方式与<<和>> c中的运营商。以下是否正确,如果没有,有人可以提出更好的方法:

Function ShiftRight(InitNum as float, bitsright as integer) as float
  return InitNum / (2 ^ BitsRight)
End Function


function ShiftLeft(InitNum As float, BitsLeft As float) as float

   return InitNum * (2 ^ BitsLeft)

End Function

如果这些是正确的,那么等效函数调用对于以下内容是什么:

x = (x<<13)

会不会是

x = shiftleft(x,13) 

还是

for i = 1 to 13
    x = shiftleft(x,1) 
end for

2 个答案:

答案 0 :(得分:0)

我现在也在思考这个问题。关于你的代码的几个注释,在右移 - 由于分区返回浮动,应该摆脱分数部分;将参数声明为整数,向左和向右移动对浮点数没有意义:

function shl(num as Integer, nBits as Integer) as Integer:
   return num * 2^nBits
end function

function shr(num as Integer, nBits as Integer) as Integer:
  return int(num / 2^nBits)
end function

我不喜欢在这里使用取幂2 ^ x,因为它是一个缓慢的操作。我相当肯定他们通过对数/指数函数(即a^b := exp(b * log(a)))以float / double(因此你可以得到像2.25 ^ 0.5 = 1.5这样的东西)来做它。因此,当关注性能时,x << 13最好使用预乘的常量x / 8192代替x / 2^13

答案 1 :(得分:0)

BrightScript中有 整数位移操作,请参阅the language reference section 3.7.8

示例:

print 2 << 10 '= 2048
print 7 >> 1 '= 3