BitArShift: Difference between revisions
		
		
		
		
		
		Jump to navigation
		Jump to search
		
				
		
		
	
 (Added page for bitArShift)  | 
				m (Grammar)  | 
				||
| Line 2: | Line 2: | ||
{{Shared function}}  | {{Shared function}}  | ||
This functions performs an arithmetic shift on the integer '''value''' by integer '''n''' positions. In   | This functions performs an arithmetic shift on the integer '''value''' by integer '''n''' positions. In an ''arithmetic shift'', zeros are shifted in to replace the discarded bits. In a ''right arithmetic'' shift, the [https://en.wikipedia.org/wiki/Sign_bit sign bit] is shifted in on the left, thus preserving the sign of the operand.  | ||
See [https://en.wikipedia.org/wiki/Bitwise_operation#Arithmetic_shift Bitwise operation] for more details.  | See [https://en.wikipedia.org/wiki/Bitwise_operation#Arithmetic_shift Bitwise operation] for more details.  | ||
Latest revision as of 01:10, 22 February 2016
This functions performs an arithmetic shift on the integer value by integer n positions. In an arithmetic shift, zeros are shifted in to replace the discarded bits. In a right arithmetic shift, the sign bit is shifted in on the left, thus preserving the sign of the operand. See Bitwise operation for more details.
Syntax
int bitArShift ( int value, int n )
Required arguments
- value: The value you want to perform the arithmetic shift on.
 - n: The amount of positions to shift the value by.
 
Returns
Returns the arithmetic shifted value as integer.
Example
Click to collapse [-]
ClientThis example adds the clientside command /arshift [value] [positions = 1], which will print the result from the function bitArShift.
function getNumberAsBitString(value)
    if type(value) ~= 'number' then
        return false
    else
        local binary = ''
        for field = 31, 0, -1 do
            binary = binary .. bitExtract(value, field)
            if field % 4 == 0 then
                binary = binary ..' '
            end
        end
        return binary
    end
end
addCommandHandler('arshift',
    function (command, value, positions)
        if type(value) ~= 'string' or value:len() == 0 then
            return outputChatBox('* Syntax: /arshift [value] [positions = 1]')
        end
        if type(positions) ~= 'string' or positions:len() == 0 then
            positions = 1
        end
        local result = bitArShift(tonumber(value), tonumber(positions))
        local binary = getNumberAsBitString(result)
        outputChatBox('* Decimal: '.. result ..', Binary: '.. binary)
    end
)
If you trigger the command with /arshift 0xF0 4 and /arshift 0xF0 -4 you will receive as response:
* Decimal: 15, Binary: 0000 0000 0000 0000 0000 0000 0000 1111 * Decimal: 3840, Binary: 0000 0000 0000 0000 0000 1111 0000 0000