---
name: "ggidev-invert_3"
section: "3"
platform: "linux"
package: "libggi2-dev"
version: "1:2.2.2-5"
release: "Debian 6.0 (Squeeze)"
platforms: ["linux"]
url: "https://new.carta.tech/ggidev-invert_3"
---

# ggidev-invert\_3(3)

Bitwise triple-int operations

## NAME

**ggidev-invert\_3**, **ggidev-lshift\_3**, **ggidev-rshift\_3** - Bitwise triple-int operations

## SYNOPSIS

```
#include <ggi/internal/triple-int.h>
unsigned *invert_3(unsigned x[3]);
unsigned *lshift_3(unsigned l[3], unsigned r);
unsigned *rshift_3(unsigned l[3], unsigned r);
```

## DESCRIPTION

**invert\_3** inverts all bits of **x**. Equivalent to x=~x.

**lshift\_3** shifts **l** to the left by **r** bits. Equivalent to l\<\<=r.

**rshift\_3** shifts **l** to the right by **r** bits. This shift is arithmetic, so the sign of **l** is kept as is. Equivalent to l\>\>=r.

## RETURN VALUE

**invert\_3** returns a pointer to **x** which has been updated in place.

Both **lshift\_3** and **rshift\_3** return a pointer to **l** which has been updated in place.

## EXAMPLES

Some bitwise operations on **triple-ints**:

```
unsigned x[3];
assign_int_3(x, -4);
invert_3(x);     /* x is now 3 */
lshift_3(x, 42); /* x is now 3*2^42, if that fits in a triple-int */
rshift_3(x, 17); /* x is now 3*2^25 */
```

## SEE ALSO

`ggidev-triple-int(7)`, `ggidev-assign_int_3(3)`
