如何使用AutoIT BitShift()避免符号扩展?

时间:2017-07-11 21:48:07

标签: autoit

尝试从C端口算法时,我确定如果设置了32位字段的高位,AutoIT BitShift()函数会对扩展进行符号扩展。

    ConsoleWrite("Bit shift test: (0x80112233 >> 4)=" & hex(BitShift(0x80112233,4)) & @CRLF) ;### Debug Console
    ConsoleWrite("Bit shift test: (0x60112233 >> 4)=" & hex(BitShift(0x60112233,4)) & @CRLF) ;### Debug Console

Bit shift test: (0x80112233 >> 4)=F8011223
Bit shift test: (0x60112233 >> 4)=06011223

了解第一个测试如何添加' F'到前面。

我认为我偏离了AutoIT的正常操作(不是很多关于BitShift和BitRotate的文档,我也没有看到任何其他人遇到过这个问题),但我'我希望有人可以轻松解决这个问题。

如果重要的话,我会使用3.6.6的SciTe。

1 个答案:

答案 0 :(得分:1)

我不认为当前的BitShift()工作错误。官方documentation说:

  

位操作以32位整数执行。

由于它没有说“为无符号 32位整数”,因此符号扩展似乎没问题。

但是,我不认为你指出。如果您知道所需的行为,为什么不实施自定义功能以满足您的需求?这是我的变体:

Func BitShiftUnsigned($value, $shift)
    If $shift > 0 Then
        Return BitAnd(BitShift($value,$shift), BitShift(0x7fffffff, $shift-1))
    Else
        Return BitShift($value,$shift)
    EndIf
EndFunc