尝试从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。
答案 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