Итак, в некоторых случаях в битшифте получаю совсем не то что нужно, например:
как можно заметить, первый результат верный, но второй совсем не то, хотя моя функция точно такая же. Хотелось бы узнать почему, потому что с точно такими же значениями, я использую напрямую BitShift и получаю такое же число как и в моем примере.
Ради интереса сделал еще такую функцию:
и там точно так же. Вот собственно после этого я и начал думать, что скорее всего тут я где-то лажаю.
Код:
$offset = 1
MsgBox(0, '', Hex(BitShift(1342177280, -($offset))) & @CRLF & shift(1342177280, $offset))
Func shift($arg1, $arg2)
Return BitShift($arg1, -($arg2))
EndFunc
как можно заметить, первый результат верный, но второй совсем не то, хотя моя функция точно такая же. Хотелось бы узнать почему, потому что с точно такими же значениями, я использую напрямую BitShift и получаю такое же число как и в моем примере.
Ради интереса сделал еще такую функцию:
Код:
Func shift1($arg1, $arg2, $arg3)
AsmReset($Asm)
If $arg3 = 0 Then
AsmAdd($Asm, "push ebp")
AsmAdd($Asm, "mov ebp, esp")
AsmAdd($Asm, "mov eax, [ebp + 08]")
AsmAdd($Asm, "shl eax, " & $arg2)
AsmAdd($Asm, "pop ebp")
AsmAdd($Asm, "retn 4")
ConsoleWrite(String(AsmGetBinary($Asm)) & @CRLF)
$Ret = MemoryFuncCall("int", AsmGetPtr($Asm), "int", $arg1)
Else
AsmAdd($Asm, "push ebp")
AsmAdd($Asm, "mov ebp, esp")
AsmAdd($Asm, "mov eax, [ebp + 08]")
AsmAdd($Asm, "shr eax, " & $arg2)
AsmAdd($Asm, "pop ebp")
AsmAdd($Asm, "retn 4")
ConsoleWrite(String(AsmGetBinary($Asm)) & @CRLF)
$Ret = MemoryFuncCall("int", AsmGetPtr($Asm), "int", $arg1)
EndIf
Return $Ret[0]
EndFunc ;==>shift1
и там точно так же. Вот собственно после этого я и начал думать, что скорее всего тут я где-то лажаю.