Basics of how binary counting works
Try and remember base number theory from school. In binary we have only two digits - 1 or 0.
So how do we represent a sequence like 1, 2, 3,4,5,6,7,8,9, 10 in binary?
This is what is looks like:
1, 10, 11, 100, 101, 110, 111, 1000, 1001, 1010
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
From decimal we think of the “one’s column” and the “ten’s column”, every time we add one to 9 we carry the one and add it to the ten’s column.
In binary we only have two digits so the columns are:
First column - 1’s
2nd column. - 2’s
3rd column. - 4’s
4th column - 8’s
i.e. going up by “powers of 2” - 2^(Nth column)
In binary we describe each binary digit as a “bit” - 0 or 1
A 32 bit number - is a binary number with 32 digits
The maximum size number we can store in a binary 32 bit number is 2^32 - 1 or in long hand
1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 - which is 4294967296
This is unsigned 32 bit integer in binary.
So how can we express negative numbers in binary? The convention is to have a signed integer and to use the left most “bit” - i.e. a digit to indicate whether or not the number is negative or positive.
If the top bit is 1 then the number is negative. A signed integer loses one of it’s digits and so it cannot express as big of a number as an unsigned integer.
The range is from -2^31 to 2^31 or -2147483648 to 2147483648
The interesting thing is 0 in signed integer looks like this - which is same as 0 in a unsigned integer
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
When we subtract 1 we end up with this:
1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111
Which for a signed integer means -1 in decimal
But for an unsigned integer it means 4294967296.