naM ,sevitcepsreP weN

# npm

## trit-shift

1.0.1 • Public • Published

# trit-shift

Trit shifting operations

Usage:

``````var shl = require('trit-shift').shl;
var shr = require('trit-shift').shr;

// shift left
shl(input, carryIn);
shl(1, 0);  // 1 ('01') -> 3 ('10'), shift in zero from left
shl(1, -1); // 1 ('01') -> 2 ('1i'), shift in negative from left

// shift right
shr(input, width, carryIn);
shr(3, 5, 0); // 3 ('10') -> 1 ('01'), shifted right
``````

Balanced ternary base 3 trit shifting, analogous to base 2 bit shifting operations. See also balanced-ternary.

Both shift left and shift right take a required parameter for the trit to shift in (`carryIn`); zero is not assumed since shifting in -1 or +1 may be desired (for example, for tritmasks). Shifting left is equivalent to multiplication by three, plus the carry:

``````shl(x, 0);  // x * 3
shl(x, 1);  // x * 3 + 1
shl(x, -1); // x * 3 - 1
``````

Shifting right is equivalent to division by three, rounded to the nearest integer, plus the carry input trit at the most-significant trit position (which is why the `width` parameter is required, set to number of trits in the input value).

``````shr(x, N, 0);   // Math.round(x / 3)
``````

Used to simulate ternary shift registers. The shifted-out value is not returned but can be computed separately using lst for `shr`, and trit-getset at the most significant trit for `shl`.

## Keywords

### Install

`npm i trit-shift`

### Repository

github.com/thirdcoder/trit-shift

### Homepage

github.com/thirdcoder/trit-shift