Module CCInt64
Int64
Helpers for 64-bit integers.
This module provides operations on the type int64 of signed 64-bit integers. Unlike the built-in int type, the type int64 is guaranteed to be exactly 64-bit wide on all platforms. All arithmetic operations over int64 are taken modulo 264.
Performance notice: values of type int64 occupy more memory space than values of type int, and arithmetic operations on int64 are generally slower than those on int. Use int64 only when the application requires exact 64-bit arithmetic.
- since
- 0.13
Documentation for the standard Int64 module
include module type of sig ... end
val neg : int64 -> int64
val add : int64 -> int64 -> int64
val sub : int64 -> int64 -> int64
val mul : int64 -> int64 -> int64
val div : int64 -> int64 -> int64
val unsigned_rem : int64 -> int64 -> int64
val succ : int64 -> int64
val pred : int64 -> int64
val abs : int64 -> int64
val max_int : int64
val min_int : int64
val logand : int64 -> int64 -> int64
val logor : int64 -> int64 -> int64
val logxor : int64 -> int64 -> int64
val shift_left : int64 -> int -> int64
val shift_right : int64 -> int -> int64
val shift_right_logical : int64 -> int -> int64
val of_int : int -> int64
val to_int : int64 -> int
val hash : t -> int
hash x
computes the hash ofx
. LikeStdlib
.abs (to_int x).
val sign : t -> int
sign x
return0
ifx = 0
,-1
ifx < 0
and1
ifx > 0
. Same ascompare x zero
.- since
- 3.0
val pow : t -> t -> t
pow base exponent
returnsbase
raised to the power ofexponent
.pow x y = x^y
for positive integersx
andy
. RaisesInvalid_argument
ifx = y = 0
ory
< 0.- since
- 0.11
val floor_div : t -> t -> t
floor_div x n
is integer division rounding towards negative infinity. It satisfiesx = m * floor_div x n + rem x n
.- since
- 3.0
type 'a printer
= Stdlib.Format.formatter -> 'a -> unit
type 'a random_gen
= Stdlib.Random.State.t -> 'a
type 'a iter
= ('a -> unit) -> unit
val range_by : step:t -> t -> t -> t iter
range_by ~step i j
iterates on integers fromi
toj
included, where the difference between successive elements isstep
. Use a negativestep
for a decreasing list.- raises Invalid_argument
if
step=0
.
- since
- 3.0
val range : t -> t -> t iter
range i j
iterates on integers fromi
toj
included . It works both for decreasing and increasing ranges.- since
- 3.0
val range' : t -> t -> t iter
range' i j
is likerange
but the second boundj
is excluded. For instancerange' 0 5 = Iter.of_list [0;1;2;3;4]
.- since
- 3.0
val random : t -> t random_gen
val random_small : t random_gen
val random_range : t -> t -> t random_gen
Conversion
val of_string : string -> t option
of_string s
is the safe version ofof_string_exn
. Likeof_string_exn
, but returnNone
instead of raising.
val of_string_exn : string -> t
of_string_exn s
converts the given strings
into a 64-bit integer. Alias toInt64
.of_string. The string is read in decimal (by default, or if the string begins with0u
) or in hexadecimal, octal or binary if the string begins with0x
,0o
or0b
respectively.The
0u
prefix reads the input as an unsigned integer in the range[0, 2*CCInt64.max_int+1]
. If the input exceedsCCInt64.max_int
it is converted to the signed integerCCInt64.min_int + input - CCInt64.max_int - 1
.The
_
(underscore) character can appear anywhere in the string and is ignored. RaiseFailure "Int64.of_string"
if the given string is not a valid representation of an integer, or if the integer represented exceeds the range of integers representable in typeint64
.
val to_string_binary : t -> string
to_string_binary x
returns the string representation of the integerx
, in binary.- since
- 3.0
Printing
Infix Operators
module Infix : sig ... end
include module type of Infix
val (/) : t -> t -> t
x / y
is the integer quotient ofx
andy
. Integer division. RaiseDivision_by_zero
if the second argumenty
is zero. This division rounds the real quotient of its arguments towards zero, as specified forStdlib
.(/).
val (mod) : t -> t -> t
x mod y
is the integer remainder ofx / y
. Ify <> zero
, the result ofx mod y
satisfies the following properties:zero <= x mod y < abs y
andx = ((x / y) * y) + (x mod y)
. Ify = 0
,x mod y
raisesDivision_by_zero
.
val (lsl) : t -> int -> t
x lsl y
shiftsx
to the left byy
bits, filling in with zeroes. The result is unspecified ify < 0
ory >= 64
.
val (lsr) : t -> int -> t
x lsr y
shiftsx
to the right byy
bits. This is a logical shift: zeroes are inserted in the vacated bits regardless of the sign ofx
. The result is unspecified ify < 0
ory >= 64
.