没有<<或>>运算符与我正在使用的语言(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
答案 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