Why is the range of signed byte is from -128 to 127 (2's complement) and not from -127 to 127?

bit-manipulation, cpu-architecture, math, twos-complement

Solution

Why is the range of unsigned byte is from -128 to 127?

It's not. An unsigned byte (assuming 8-bit) is from 0 to 255.

The range of a signed byte using 2's complement is from -128 to 127, directly from the definition of 2's complement:

01111111 = +127
01111110 = +126
01111101 = +125
...
00000001 = +1
00000000 =  0
11111111 = -1
...
10000010 = -126
10000001 = -127
10000000 = -128

so is representation of -128 10000000 or 110000000 ?

In 8-bit, it's `10000000`, in a hypothetical 9-bit representation it's `110000000`.

Why not simply make the lower range -127 for 8 bits?

Artificially restricting the range to -127 wouldn't achieve very much; you'd be disallowing a perfectly valid value, and generally making code more complex (what else would you do with the bit pattern `10000000`?).

Problem

I read Why is the range of bytes -128 to 127 in Java? it says 128 is 10000000. Inverted, it's 01111111, and adding one gets 10000000 again so it concludes -128 is 10000000 so +128 cannot be represented in 2's complement in 8 bits, but that means we can represent it in 9 bits, so 128 is 010000000 and so taking its 2's complement -128 is 110000000, so is representation of -128 10000000 or 110000000 ? Is the representaion bit dependent ? Why not simply make the lower range -127 fot 8 bits instead of writing -128 as 10000000 ?

Original source

Related problems