**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)