Module CCNativeint
Nativeint
Helpers for processor-native integers
This module provides operations on the type nativeint
of signed 32-bit integers (on 32-bit platforms) or signed 64-bit integers (on 64-bit platforms). This integer type has exactly the same width as that of a pointer type in the C compiler. All arithmetic operations over nativeint are taken modulo 232 or 264 depending on the word size of the architecture.
Performance notice: values of type nativeint
occupy more memory space than values of type int
, and arithmetic operations on nativeint
are generally slower than those on int
. Use nativeint
only when the application requires the extra bit of precision over the int
type.
- since
- 2.1
Documentation for the standard Nativeint module
include module type of sig ... end
val neg : nativeint -> nativeint
val add : nativeint -> nativeint -> nativeint
val sub : nativeint -> nativeint -> nativeint
val mul : nativeint -> nativeint -> nativeint
val div : nativeint -> nativeint -> nativeint
val unsigned_rem : nativeint -> nativeint -> nativeint
val succ : nativeint -> nativeint
val pred : nativeint -> nativeint
val abs : nativeint -> nativeint
val size : int
val max_int : nativeint
val min_int : nativeint
val logand : nativeint -> nativeint -> nativeint
val logor : nativeint -> nativeint -> nativeint
val logxor : nativeint -> nativeint -> nativeint
val shift_left : nativeint -> int -> nativeint
val shift_right : nativeint -> int -> nativeint
val shift_right_logical : nativeint -> int -> nativeint
val of_int : int -> nativeint
val to_int : nativeint -> 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 native integer. Alias toNativeint
.of_string. Convert the given string to a native integer. 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*CCNativeint.max_int+1]
. If the input exceedsCCNativeint.max_int
it is converted to the signed integerCCInt64.min_int + input - CCNativeint.max_int - 1
.Raise
Failure "Nativeint.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 typenativeint
.
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. The result is unspecified ify < 0
ory >= bitsize
, wherebitsize
is32
on a 32-bit platform and64
on a 64-bit platform.
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 >= bitsize
.