Library
Module
Module type
Parameter
Class
Class type
The platform-dependant signed integer type.
An int
is a whole number.
int
s are subject to overflow, meaning that Int.maximumValue + 1 = Int.minimumValue
.
If you need to work with integers larger than maximumValue
(or smaller than minimumValue
you can use the Integer
module.
Valid syntax for int
s includes:
42
(-7)
1_000_000
0xFF (* 255 in hexadecimal *)
Note: The number of bits used for an int
is platform dependent.
When targeting Bucklescript an int
is 32 bits.
When targeting native OCaml uses 31-bits on 32-bit platforms and 63-bits on 64-bit platforms which means that int
math is well-defined in the range -2 ** 30
to 2 ** 30 - 1
for 32bit platforms -2 ** 62
to 2 ** 62 - 1
for 64bit platforms.
Outside of that range, the behavior is determined by the compilation target.
If you need to work with values outside that range, you can use the Integer
module.
You can read about the reasons for OCaml's unusual integer sizes here.
Historical Note: The name int
comes from the term integer. It appears that the int
abbreviation was introduced in the programming language ALGOL 68.
Today, almost all programming languages use this abbreviation.
Fixed precision integers
Attempt to parse a string
into a int
.
Examples
Int.ofString "42" = Some 42.
Int.ofString "-3" = Some (-3)
Int.ofString "123_456" = Some 123_456
Int.ofString "0xFF" = Some 255
Int.ofString "Infinity" = None
Int.ofString "NaN" = None
Note You do not need to open the Int
module to use the (+)
, (-)
, (*)
, (**)
, (mod)
or (/)
operators, these are available as soon as you open Standard
See Int.add
Subtract numbers
Examples
Int.subtract 4 3 = 1
Alternatively the operator can be used:
4 - 3 = 1
See Int.subtract
Multiply int
s
Examples
Int.multiply 2 7 = 14
Alternatively the operator can be used:
(2 * 7) = 14
See Int.multiply
Integer division
Notice that the remainder is discarded.
Exceptions
Throws Division_by_zero
when by
is 0
.
Examples
Int.divide 3 ~by:2 = 1
27 / 5 = 5
See Int.divide
Floating point division
Examples
Int.(3 /. 2) = 1.5
Int.(27 /. 5) = 5.25
Int.(8 /. 4) = 2.0
Exponentiation, takes the base first, then the exponent.
Examples
Int.power ~base:7 ~exponent:3 = 343
Alternatively the **
operator can be used:
7 ** 3 = 343
See Int.power
Flips the 'sign' of an int so that positive ints become negative and negative ints become positive. Zero stays as it is.
Examples
Int.negate 8 = (-8)
Int.negate (-7) = 7
Int.negate 0 = 0
Alternatively the ~-
operator can be used:
~-(7) = (-7)
See Int.negate
Get the absolute value of a number.
Examples
Int.absolute 8 = 8
Int.absolute (-7) = 7
Int.absolute 0 = 0
Perform modular arithmetic.
If you intend to use modulo
to detect even and odd numbers consider using Int.isEven
or Int.isOdd
.
The modulo
function works in the typical mathematical way when you run into negative numbers
Use Int.remainder
for a different treatment of negative numbers.
Exceptions
Throws Division_by_zero
when by
is 0
.
Examples
Int.modulo ~by:3 (-4) = 1
Int.modulo ~by:3 (-3) = 0
Int.modulo ~by:3 (-2) = 1
Int.modulo ~by:3 (-1) = 2
Int.modulo ~by:3 0 = 0
Int.modulo ~by:3 1 = 2
Int.modulo ~by:3 2 = 1
Int.modulo ~by:3 3 = 0
Int.modulo ~by:3 4 = 1
See Int.modulo
Get the remainder after division. Here are bunch of examples of dividing by four:
Use Int.modulo
for a different treatment of negative numbers.
Exceptions
Throws Division_by_zero
when by
is 0
.
Examples
Int.remainder ~by:3 (-4) = 1
Int.remainder ~by:3 (-3) = 0
Int.remainder ~by:3 (-2) = 2
Int.remainder ~by:3 (-1) = 1
Int.remainder ~by:3 0 = 0
Int.remainder ~by:3 1 = 1
Int.remainder ~by:3 2 = 2
Int.remainder ~by:3 3 = 0
Int.remainder ~by:3 4 = 1
Returns the larger of two int
s
Examples
Int.maximum 7 9 = 9
Int.maximum (-4) (-1) = (-1)
Returns the smaller of two int
s
Examples
Int.minimum 7 9 = 7
Int.minimum (-4) (-1) = (-4)
Check if an int
is even
Examples
Int.isEven 8 = true
Int.isEven 7 = false
Int.isEven 0 = true
Check if an int
is odd
Examples
Int.isOdd 7 = true
Int.isOdd 8 = false
Int.isOdd 0 = false
Clamps n
within the inclusive lower
and upper
bounds.
Exceptions
Throws an Invalid_argument
exception if lower > upper
Examples
Int.clamp ~lower:0 ~upper:8 5 = 5
Int.clamp ~lower:0 ~upper:8 9 = 8
Int.clamp ~lower:(-10) ~upper:(-5) 5 = (-5)
Checks if n
is between lower
and up to, but not including, upper
.
Exceptions
Throws an Invalid_argument
exception if lower > upper
Examples
Int.inRange ~lower:2 ~upper:4 3 = true
Int.inRange ~lower:5 ~upper:8 4 = false
Int.inRange ~lower:(-6) ~upper:(-2) (-3) = true
Convert an int
into a string
representation.
Guarantees that
Int.(ofString (toString n)) = Some n
Examples
Int.toString 3 = "3"
Int.toString (-3) = "-3"
Int.to_sString 0 = "0"
The unique identity for ints
Comparator