; Version: 1.4 2018/12/27 16:30:00
; Author: oscar (www.autoit.de)
#AutoIt3Wrapper_UseX64=y ; AutoIt 64-Bit-Modus
#include 'BitOperations64.au3'

Global $ret, $aUINT64[] = [0xFFFFFFFF000001FF, 0xFFFFFFFF0000001F, 0xFFFFFFFF0000000F, 0xFFFFFFFF000000FF]

#Region BitAND, BitOR and BitXOR
; works with 2-8 parameters in the function call
$ret = _BitAND64(0xFFFFFFFF00000052, 0xFFFFFFFF0000004F, 0xFFFFFFFF000000F2)
ConsoleWrite(StringFormat('_BitAND64(0xFFFFFFFF00000052, 0xFFFFFFFF0000004F, 0xFFFFFFFF000000F2) = 0x%s\r\n', Hex($ret, 16)))

$ret = _BitOR64(0xFFFFFFFF00000001, 0xFFFFFFFF00000002, 0xFFFFFFFF00000003, 0xFFFFFFFF00000004)
ConsoleWrite(StringFormat('_BitOR64(0xFFFFFFFF00000001, 0xFFFFFFFF00000002, 0xFFFFFFFF00000003, 0xFFFFFFFF00000004) = 0x%s\r\n', Hex($ret, 16)))

$ret = _BitXOR64(0xFFFFFFFF00000001, 0xFFFFFFFF00000100)
ConsoleWrite(StringFormat('_BitXOR64(0xFFFFFFFF00000001, 0xFFFFFFFF00000100) = 0x%s\r\n\r\n', Hex($ret, 16)))

; or with an array (with unlimited values) as first parameter
$ret = _BitAND64($aUINT64)
ConsoleWrite(StringFormat('_BitAND64($aUINT64) = 0x%s\r\n', Hex($ret, 16)))

$ret = _BitOR64($aUINT64)
ConsoleWrite(StringFormat('_BitOR64($aUINT64) = 0x%s\r\n', Hex($ret, 16)))

$ret = _BitXOR64($aUINT64)
ConsoleWrite(StringFormat('_BitXOR64($aUINT64) = 0x%s\r\n\r\n', Hex($ret, 16)))
#EndRegion

#Region BitNot
$ret = _BitNOT64(0xFFFFFFFF00000011)
ConsoleWrite(StringFormat('_BitNOT64(0xFFFFFFFF00000011) = 0x%s\r\n\r\n', Hex($ret, 16)))
#EndRegion

#Region BitRotate
; With the helper function "_BitRotate64"
; Second parameter = Number of bits to rotate to the right (negative numbers rotate left).
$ret = _BitRotate64(0xFFFFFFFF00000001, 4)
ConsoleWrite(StringFormat('_BitRotate64(0xFFFFFFFF00000001, 4) = 0x%s\r\n', Hex($ret, 16)))

$ret = _BitRotate64(0xFFFFFFFF00000001, -4)
ConsoleWrite(StringFormat('_BitRotate64(0xFFFFFFFF00000001, -4) = 0x%s\r\n', Hex($ret, 16)))

; or with the native functions
$ret = _BitROR64(0xFFFFFFFF00000001, 4)
ConsoleWrite(StringFormat('_BitROR64(0xFFFFFFFF00000001, 4) = 0x%s\r\n', Hex($ret, 16)))

$ret = _BitROL64(0xFFFFFFFF00000001, 4)
ConsoleWrite(StringFormat('_BitROL64(0xFFFFFFFF00000001, 4) = 0x%s\r\n\r\n', Hex($ret, 16)))
#EndRegion

#Region BitShift
; With the helper function "_BitShift64"
; Second parameter = Number of bits to shift to the right (negative numbers shift left).
$ret = _BitShift64(0xFFFFFFFF00000001, 4)
ConsoleWrite(StringFormat('_BitShift64(0xFFFFFFFF00000001, 4) = 0x%s\r\n', Hex($ret, 16)))

$ret = _BitShift64(0xFFFFFFFF00000001, -4)
ConsoleWrite(StringFormat('_BitShift64(0xFFFFFFFF00000001, -4) = 0x%s\r\n', Hex($ret, 16)))

; or with the native functions
$ret = _BitSHR64(0xFFFFFFFF00000001, 4)
ConsoleWrite(StringFormat('_BitSHR64(0xFFFFFFFF00000001, 4) = 0x%s\r\n', Hex($ret, 16)))

$ret = _BitSHL64(0xFFFFFFFF00000001, 4)
ConsoleWrite(StringFormat('_BitSHL64(0xFFFFFFFF00000001, 4) = 0x%s\r\n', Hex($ret, 16)))
#EndRegion
