# How would a computer represent a negative base ten number in bits?

How would a computer represent -6886707 using 24 bits?

I need someway to verify this: 100101101110101011001101.

First I converted 6886707 to binary, which is 11010010001010100110011. Then I put one zero at the left in order to have 24 bits, then I switched the zeros into ones, and ones into zeros, and added 1.

The 2’s complement way to express -6886707 using 24 bits is, acording to:

``````         100101101110101011001101 <- you
100101101110101011001101 <- exploringbinary.com
‭11111111100101101110101011001101‬ <- win10 calculator in Programmer-DWORD (32 bit) mode
``````

The win10 calculator agrees with you. It just doesn’t happen to have a 24 bit mode. Chop off the extra 8 bits and you get 24 bits that match. Those extra 1’s come from something called sign extension.

So you didn’t do any math wrong. Flipping the bits and adding 1 is exactly how to do two’s complement negation.

Don’t trust all base 10 to binary converters to do 2’s complement. exploringbinary.com does it, as I confermed with a -1 test. -1 should give you 1’s in every bit.

However, binaryhexconverter.com doesn’t and google doesn’t. They do positive numbers fine but don’t trust them with your negatives.

Walking through the steps:

`````` Base 10   24 bits in Base 2

6886707 = ‭011010010001010100110011
Not (flip the bits)
-6886708 = ‭100101101110101011001100
-6886707 = ‭100101101110101011001101‬
Negate (change sign ±)
6886707 = ‭011010010001010100110011
``````

Add we’re back where we started. As far as I can tell your math is fine.

The lesson of 2’s complement is that the two operations: `Not` and `Add 1` done in order give the same result as `Negate`.

It also works this way:

`````` Base 10   Base 2 in 24 bits

-6886707 = ‭100101101110101011001101‬
Not (flip the bits)
‭‭6886706‬ = 011010010001010100110010‬
``````Negate(x) == AddOne(BitWiseNot(x)) is always true.