Learn R Programming

GLDEX (version 2.0.0.9.3)

digitsBase: Digit/Bit Representation of Integers in any Base

Description

Integer number representations in other Bases.

Formally, for every element \(N =\)x[i], compute the (vector of) “digits” \(A\) of the base \(b\) representation of the number \(N\), \(N = \sum_{k=0}^M A_{M-k} b ^ k\).
Revert such a representation to integers.

Usage

digitsBase(x, base = 2, ndigits = 1 + floor(log(max(x), base)))

Value

For digitsBase(), an object, say m, of class

"basedInt" which is basically a (ndigits x n)

matrix where m[,i] corresponds to x[i],

n <- length(x) and attr(m,"base") is the input

base.

as.intBase() and the as.integer method for

basedInt objects return an integer vector.

Arguments

x

For digitsBase(): non-negative integer (vector) whose base base digits are wanted.

For as.intBase():
a list of numeric vectors, a character vector, or an integer matrix as returned by digitsBase(), representing digits in base base.

base

integer, at least 2 specifying the base for representation.

ndigits

number of bits/digits to use.

Author

Martin Maechler, Dec 4, 1991 (for S-plus; then called digits.v).

Examples

Run this code
digitsBase(0:12, 8) #-- octal representation

## This may be handy for just one number (and default decimal):
digits <- function(n, base = 10) as.vector(digitsBase(n, base = base))
digits(128, base = 8) # 2 0 0

## one way of pretty printing (base <= 10!)
b2ch <- function(db)
        noquote(gsub("^0+(.{1,})$"," \1", apply(db, 2, paste, collapse = "")))
b2ch(digitsBase(0:33, 2))  #->  0 1 10 11 100 101 ... 100001
b2ch(digitsBase(0:33, 4))  #->  0 1 2 3 10 11 12 13 20 ... 200 201

## Hexadecimal:
i <- c(1:20, 100:106)
M <- digitsBase(i, 16)
hexdig <- c(0:9, LETTERS[1:6])
cM <- hexdig[1 + M]; dim(cM) <- dim(M)
b2ch(cM) #->  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F 10 11 ... 6A

Run the code above in your browser using DataLab