bitFlip {bitops} R Documentation

## Binary Flip (Not) Operator

### Description

The binary flip (‘not’, R's `!`) operator, `bitFlip(a, w)`, “flips every bit” of `a` up to the `w`-th bit.

### Usage

```bitFlip(a, bitWidth = 32)
```

### Arguments

 `a` numeric vector. `bitWidth` scalar integer between 0 and 32.

### Value

(“binary”) numeric vector of the same length as `a` masked with (2^`bitWidth`)-1. `NA` is returned for any value of `a` that is not finite or whose magnitude is greater or equal to 2^{32}.

### Note

`bitFlip(a, w)` is an “involution”, i.e. it is its own inverse – when `a` is in \{0, 1, .., 2^{32}-1\}. Notably, negative values `a` are equivalent to their values in the above range, see also `bitUnique()` in the ‘Examples’.

### Author(s)

Steve Dutky

`bitShiftL`, `bitXor`, etc.

### Examples

```bitFlip(0:5)
##
bitUnique <- function(x) bitFlip(bitFlip(x)) # "identity" when x in  0:(2^32-1)
bitUnique(  0:16 ) # identical (well, double precision)
bitUnique(-(1:16)) # 4294967295 ...
stopifnot(
identical(bitUnique(-(1:16)), 2^32 -(1:16)),
bitFlip(-1) == 0,
bitFlip(0 ) == 2^32 - 1,
bitFlip(0, bitWidth=8) == 255
)
```

[Package bitops version 1.0-7 Index]