2

我正在使用的语言(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
4

2 回答 2

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)). 因此,当考虑性能时,最好x << 13使用预乘常数x / 8192而不是x / 2^13

于 2014-05-15T23:31:12.323 回答
0

BrightScript 中整数位移操作,见语言参考第 3.7.8 节

例子:

print 2 << 10 '= 2048
print 7 >> 1 '= 3
于 2015-02-10T20:11:02.503 回答