This is most probably the dumbest question anyone would ask, but regardless I hope I will find a clear answer for this.
My question is - How is an integer stored in computer memory?
In c# an integer is of size 32 bit. MSDN says we can store numbers from -2,147,483,648 to 2,147,483,647 inside an integer variable.
As per my understanding a bit can store only 2 values i.e 0 & 1. If I can store only 0 or 1 in a bit, how will I be able to store numbers 2 to 9 inside a bit?
More precisely, say I have this code int x = 5; How will this be represented in memory or in other words how is 5 converted into 0's and 1's, and what is the convention behind it?
It's represented in binary (base 2). Read more about number bases. In base 2 you only need 2 different symbols to represent a number. We usually use the symbols
0and1. In our usual base we use10different symbols to represent all the numbers,0,1,2, ...8, and9.For comparison, think about a number that doesn't fit in our usual system. Like 14. We don't have a symbol for 14, so how to we represent it? Easy, we just combine two of our symbols
1and4.14in base 10 means1*10^1 + 4*10^0.1110in base 2 (binary) means1*2^3 + 1*2^2 + 1*2^1 + 0*2^0 = 8 + 4 + 2 + 0 = 14. So despite not having enough symbols in either base to represent14with a single symbol, we can still represent it in both bases.In another commonly used base, base 16, which is also known as hexadecimal, we have enough symbols to represent
14using only one of them. You'll usually see14written using the symbolein hexadecimal.For negative integers we use a convenient representation called twos-complement which is the complement (all
1s flipped to0and all0s flipped to1s) with one added to it.There are two main reasons this is so convenient:
We know immediately if a number is positive of negative by looking at a single bit, the most significant bit out of the
32we use.It's mathematically correct in that
x - y = x + -yusing regular addition the same way you learnt in grade school. This means that processors don't need to do anything special to implement subtraction if they already have addition. They can simply find the twos-complement ofy(recall, flip the bits and add one) and then addxandyusing the addition circuit they already have, rather than having a special circuit for subtraction.