# bit Module
| Since  | Origin / Contributor  | Maintainer  | Source  |
| :----- | :-------------------- | :---------- | :------ |
| 2014-12-24 | [https://github.com/LuaDist/bitlib](https://github.com/LuaDist/bitlib), [Zeroday](https://github.com/funshine) | [Zeroday](https://github.com/funshine) | [bit.c](../../components/modules/bit.c)|


Bit manipulation support, on the integer type used by the Lua VM. On 5.1 this
will be 32bit, whereas on 5.3 it may be either 32bit (default) or 64bit if
configured for 64bit integers.

## bit.arshift()
Arithmetic right shift a number equivalent to `value >> shift` in C.

#### Syntax
`bit.arshift(value, shift)`

#### Parameters
- `value` the value to shift
- `shift` positions to shift

#### Returns
the number shifted right (arithmetically)

## bit.band()

Bitwise AND, equivalent to `val1 & val2 & ... & valn` in C.

#### Syntax
`bit.band(val1, val2 [, ... valn])`

#### Parameters
- `val1` first AND argument
- `val2` second AND argument
- `...valn` ...nth AND argument

#### Returns
the bitwise AND of all the arguments (number)

## bit.bit()

Generate a number with a 1 bit (used for mask generation). Equivalent to `1 << position` in C.

#### Syntax
`bit.bit(position)`

#### Parameters
`position` position of the bit that will be set to 1

#### Returns
a number with only one 1 bit at position (the rest are set to 0)

## bit.bnot()

Bitwise negation, equivalent to `~value in C.

#### Syntax
`bit.bnot(value)`

#### Parameters
`value` the number to negate

#### Returns
the bitwise negated value of the number

## bit.bor()
Bitwise OR, equivalent to `val1 | val2 | ... | valn` in C.

#### Syntax
`bit.bor(val1, val2 [, ... valn])`

#### Parameters
- `val1` first OR argument.
- `val2` second OR argument.
- `...valn` ...nth OR argument

#### Returns
the bitwise OR of all the arguments (number)

## bit.bxor()

Bitwise XOR, equivalent to `val1 ^ val2 ^ ... ^ valn` in C.

#### Syntax
`bit.bxor(val1, val2 [, ... valn])`

#### Parameters
- `val1` first XOR argument
- `val2` second XOR argument
- `...valn` ...nth XOR argument

#### Returns
the bitwise XOR of all the arguments (number)

## bit.clear()
Clear bits in a number.

#### Syntax
`bit.clear(value, pos1 [, ... posn])`

#### Parameters
- `value` the base number
- `pos1` position of the first bit to clear
- `...posn` position of thet nth bit to clear

#### Returns
the number with the bit(s) cleared in the given position(s)

## bit.isclear()

Test if a given bit is cleared.

#### Syntax
`bit.isclear(value, position)`

#### Parameters
- `value` the value to test
- `position` bit position to test

#### Returns
`true` if the bit at the given position is 0, `false` othewise

## bit.isset()

Test if a given bit is set.

#### Syntax
`bit.isset(value, position)`

#### Parameters
- `value` the value to test
- `position` bit position to test

#### Returns
`true` if the bit at the given position is 1, `false` otherwise

## bit.lshift()
Left-shift a number, equivalent to `value << shift` in C.

#### Syntax
`bit.lshift(value, shift)`

#### Parameters
- `value` the value to shift
- `shift` positions to shift

#### Returns
the number shifted left

## bit.rshift()

Logical right shift a number, equivalent to `( unsigned )value >> shift` in C.

#### Syntax
`bit.rshift(value, shift)`

#### Parameters
- `value` the value to shift.
- `shift` positions to shift.

#### Returns
the number shifted right (logically)

## bit.set()

Set bits in a number.

#### Syntax
`bit.set(value, pos1 [, ... posn ])`

#### Parameters
- `value` the base number.
- `pos1` position of the first bit to set.
- `...posn` position of the nth bit to set.

#### Returns
the number with the bit(s) set in the given position(s)
