We have a quick one today to finish up integer operators, before diving into a semi-hairy topic next…

## Integer operators

…

For integer operands, the unary operators

`+`

,`-`

, and`^`

are defined as follows:`+x is 0 + x -x negation is 0 - x ^x bitwise complement is m ^ x with m = "all bits set to 1" for unsigned x and m = -1 for signed x`

So the first two are pretty obvious… `+`

and `-`

just allow you to specify the sign of a thing. `+`

is rarely used, because it does, well… nothing. LOL.

`+x`

is always equal to `x`

.

`-`

on the other hand, is how you specify a literal negative number. Actually, you can’t express a literal negative number in Go… you can only apply the `-`

operator to a positive number!

But that third one… `^`

… that’s a little more archaic, and requires some explanation. It’s a bitwise operation, so I’ll demonstrate using binary representations of data:

```
x := uint(0b101010) // decimal 42 in binary
fmt.Printf("%b\n", ^x) // 1111111111111111111111111111111111111111111111111111111111010101
```

As you can see, this just flips the bits:

```
0000000000000000000000000000000000000000000000000000000000101010
1111111111111111111111111111111111111111111111111111111111010101
```

I chose `uint`

to demonstrate with an unsinged integer, because the binary is easier to reason about, but it does the same with signed ints (i.e. `int`

), but two’s compliment math makes it a bit tricker to reason about. Let’s leave it at: it does the same thing at the bit level.

Quotes from *The Go Programming Language Specification* Version of August 2, 2023