# SRFI 143 - Fixnums

This SRFI describes arithmetic procedures applicable to a limited range of exact integers only. These procedures are semantically similar to the corresponding generic-arithmetic procedures, but allow more efficient implementations.

See the SRFI document for more information.

## Constants

## Predicates

`fixnum?`

`fx=?`

`fx<?`

`fx>?`

`fx<=?`

`fx>=?`

`fxzero?`

`fxpositive?`

`fxnegative?`

`fxodd?`

`fxeven?`

`fxmax`

`fxmin`

## Basic arithmetic

`fx+`

`fx-`

`fx*`

`fxneg`

`fxquotient`

`fxremainder`

`fxabs`

`fxsquare`

`fxsqrt`

# Bitwise operations

`fxnot`

`fxand`

`fxior`

`fxxor`

`fxarithmetic-shift`

`fxarithmetic-shift-left`

`fxarithmetic-shift-right`

`fxbit-count`

`fxlength`

`fxif`

`fxbit-set?`

`fxcopy-bit`

`fxfirst-set-bit`

`fxbit-field`

`fxbit-field-rotate`

`fxbit-field-reverse`

# fx-width

```
(fx-width)
```

Bound to the value `w`

that specifies the implementation-defined fixnum integer range.

# fx-greatest

```
(fx-greatest)
```

Returns value of the largest representable fixnum.

# fx-least

```
(fx-least)
```

Returns value of the smallest representable fixnum.

# fixnum?

```
(fixnum? obj)
```

Returns `#t`

if `obj`

is an exact integer within the fixnum range, and `#f`

otherwise.

# fx=?

```
(fx=? i j)
```

Semantically equivalent to `=`

.

# fx<?

```
(fx<? i j)
```

Semantically equivalent to `<`

.

# fx>?

```
(fx>? i j)
```

Semantically equivalent to `>`

.

# fx<=?

```
(fx<=? i j)
```

Semantically equivalent to `<=`

.

# fx>=?

```
(fx>=? i j)
```

Semantically equivalent to `>=`

.

# fxzero?

```
(fxzero? i)
```

Semantically equivalent to `zero?`

.

# fxpositive?

```
(fxpostiive? i)
```

Semantically equivalent to `positive?`

.

# fxnegative?

```
(fxnegative? i)
```

Semantically equivalent to `negative?`

.

# fxodd?

```
(fxodd? i)
```

Semantically equivalent to `odd?`

.

# fxeven?

```
(fxeven? i)
```

Semantically equivalent to `even?`

.

# fxmax

```
(fxmax i j)
```

Semantically equivalent to `max`

.

# fxmin

```
(fxmin i j)
```

Semantically equivalent to `min`

.

# fx+

```
(fx+ i j)
```

Semantically equivalent to `+`

, but accepts exactly two arguments.

# fx-

```
(fx- i j)
```

Semantically equivalent to `-`

, but accepts exactly two arguments.

# fx*

```
(fx* i j)
```

Semantically equivalent to `*`

, but accepts exactly two arguments.

# fxneg

```
(fxneg i)
```

Semantically equivalent to `-`

, but accepts exactly one argument.

# fxquotient

```
(fxquotient i j)
```

Semantically equivalent to `quotient`

.

# fxremainder

```
(fxremainder i j)
```

Semantically equivalent to `remainder`

.

# fxabs

```
(fxabs i)
```

Semantically equivalent to `abs`

.

# fxsquare

```
(fxsquare i)
```

Semantically equivalent to `square`

.

# fxsqrt

```
(fxsqrt i)
```

Semantically equivalent to `sqrt`

.

# fxnot

```
(fxnot i)
```

Semantically equivalent to `bitwise-not`

.

# fxand

```
(fxand i j)
```

Semantically equivalent to `bitwise-and`

.

# fxior

```
(fxior i j)
```

Semantically equivalent to `bitwise-ior`

.

# fxxor

```
(fxxor i j)
```

Semantically equivalent to `bitwise-xor`

.

# fxarithmetic-shift

```
(fxarithmetic-shift i count)
```

Semantically equivalent to `arithmetic-shift`

, except that it is an error for the absolute value of count to exceed `w-1`

.

# fxarithmetic-shift-left

```
(fxarithmetic-shift-left i count)
```

The same as `fxarithmetic-shift`

except that a negative value of count is an error. This is provided for additional efficiency.

# fxarithmetic-shift-right

```
(fxarithmetic-shift-right i count)
```

The same as `fxarithmetic-shift`

except that a non-negative value of count specifies the number of bits to shift right, and a negative value is an error. This is provided for additional efficiency.

# fxbit-count

```
(fxbit-count i)
```

Semantically equivalent to SRFI 151 `bit-count`

.

# fxlength

```
(fxlength i)
```

Semantically equivalent to `integer-length`

.

# fxif

```
(fxif mask i j)
```

Semantically equivalent to `bitwise-if`

.

# fxbit-set?

```
(fxbit-set? index i)
```

Semantically equivalent to SRFI 151 `bit-set?`

, except that it is an error for `index`

to be larger than or equal to `fx-width`

.

# fxcopy-bit

```
(fxcopy-bit index i boolean)
```

Semantically equivalent to SRFI 151 `copy-bit`

, except that it is an error for `index`

to be larger than or equal to `fx-width`

.

# fxfirst-set-bit

```
(fxfirst-set-bit i)
```

Semantically equivalent to `first-set-bit`

.

# fxbit-field

```
(fxbit-field i start end)
```

Semantically equivalent to `bit-field`

.

# fxbit-field-rotate

```
(fxbit-field-rotate i count start end)
```

Semantically equivalent to SRFI 151 `bit-field-rotate`

.

# fxbit-field-reverse

```
(fxbit-field-reverse i start end)
```

Semantically equivalent to `bit-field-reverse`

.