# Negation of Signed Integers

Solidity provides several types to work with signed integers. Like in most programming languages,
in Solidity a signed integer with `N`

bits can represent values from `-2^(N-1)`

to `2^(N-1)-1`

.
This means that there is no positive equivalent for the `MIN_INT`

. Negation is implemented as
finding the two's complement of a number, so the negation of the most negative number
will result in the same number.

This is true for all signed integer types in Solidity (`int8`

, `int16`

, ..., `int256`

).

```
contract Negation {
function negate8(int8 _i) public pure returns(int8) {
return -_i;
}
function negate16(int16 _i) public pure returns(int16) {
return -_i;
}
int8 public a = negate8(-128); // -128
int16 public b = negate16(-128); // 128
int16 public c = negate16(-32768); // -32768
}
```

One way to handle this is to check the value of a variable before negation and throw if it's equal
to the `MIN_INT`

. Another option is to make sure that the most negative number will never be
achieved by using a type with a higher capacity (e.g. `int32`

instead of `int16`

).

A similar issue with `int`

types occurs when `MIN_INT`

is multiplied or divided by `-1`

.