C-like unsigned integers for Javascript
Synopsis
Javascript does not natively support handling of unsigned 32 or 64 bits integers. This library provides that functionality, following C behaviour, enabling the writing of algorithms that depend on it.
TODO
64 bits integers not supported yet!
How it works
An unsigned 32 bits integer is represented by an object with its first 16 bits (low bits) and its 16 last ones (high bits). All the supported standard operations on the unsigned integer are then performed transparently.
e.g.
10000010000100000100010000100010 (2182104098 or 0x82104422) is represented by:
high=1000001000010000
low= 0100010000100010
NB.
In case of overflow, the unsigned integer is truncated to its lowest 32 bits.
The same applies to 64 bits integers, which are split into 4 16 bits ones.
Installation
In nodejs:
npm install cuint
In the browser, include the following (file is located in the build directory), and access the constructor with UINT32:
`
...
`
Usage
To instantiate an unsigned 32 bits integer, do any of the following:
var UINT32 = require('cuint').UINT32 // NodeJS
UINT32( <low bits>, <high bits> )
UINT32( <number> )
UINT32( '<number>' )
Examples
UINT32( 2, 1 ) // 65538
{ remainder: null, _low: 2, _high: 1 }
- Using a number (signed 32 bits integer)
UINT32( 65538 ) // 65538
{ remainder: null, _low: 2, _high: 1 }
UINT32( '65538' ) // 65538
{ remainder: null, _low: 2, _high: 1 }
UINT32( '3266489917' )
{ remainder: null, _low: 44605, _high: 49842 }
- Divide 2 unsigned 32 bits integers - note that the remainder is also provided
UINT32( '3266489917' ).div( UINT32( '668265263' ) )
{ remainder:
{ remainder: null
, _low: 385
, _high: 9055
}
, _low: 4
, _high: 0
}
Methods
UINT32.fromBits(<low bits>, <high bits>)*
Set the current UINT32 object with its low and high bitsUINT32.fromNumber(<number>)*
Set the current UINT32 object from a numberUINT32.fromString(<string>, <radix>)*
Set the current UINT32 object from a stringUINT32.toNumber()
Convert this UINT32 to a numberUINT32.toString(<radix>)
Convert this UINT32 to a stringUINT32.add(<uint>)*
Add two UINT32. The current UINT32 stores the resultUINT32.subtract(<uint>)*
Subtract two UINT32. The current UINT32 stores the resultUINT32.multiply(<uint>)*
Multiply two UINT32. The current UINT32 stores the resultUINT32.div(<uint>)*
Divide two UINT32. The current UINT32 stores the result.
The remainder is made available as the remainder property on the UINT32 object.
It can be null, meaning there are no remainder.UINT32.negate()
alias UINT32.not()
Negate the current UINT32UINT32.equals(<uint>)
alias UINT32.eq(<uint>)
EqualsUINT32.lessThan(<uint>)
alias UINT32.lt(<uint>)
Less than (strict)UINT32.greaterThan(<uint>)
alias UINT32.gt(<uint>)
Greater than (strict)UINT32.or(<uint>)*
Bitwise ORUINT32.and(<uint>)*
Bitwise ANDUINT32.xor(<uint>)*
Bitwise XORUINT32.shiftRight(<number>)*
alias UINT32.shiftr(<number>)*
Bitwise shift rightUINT32.shiftLeft(<number>[, <allowOverflow>])*
alias UINT32.shiftl(<number>[, <allowOverflow>])*
Bitwise shift leftUINT32.rotateLeft(<number>)*
alias UINT32.rotl(<number>)*
Bitwise rotate leftUINT32.rotateRight(<number>)*
alias UINT32.rotr(<number>)*
Bitwise rotate rightUINT32.clone()
Clone the current UINT32
NB. methods with an * do modify the object it is applied to. Input objects are not modified.
License
MIT
Written with StackEdit.