Win a copy of Zero to AI - A non-technical, hype-free guide to prospering in the AI era this week in the Artificial Intelligence and Machine Learning forum!
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other all forums
this forum made possible by our volunteer staff, including ...
Marshals:
• Campbell Ritchie
• Liutauras Vilda
• Paul Clapham
• Bear Bibeault
• Jeanne Boyarsky
Sheriffs:
• Ron McLeod
• Tim Cooke
• Devaka Cooray
Saloon Keepers:
• Tim Moores
• Tim Holloway
• Jj Roberts
• Stephan van Hulst
• Carey Brown
Bartenders:
• salvin francis
• Scott Selikoff
• fred rosenberger

# Formula for primitive type sizes

Ranch Hand
Posts: 52
Hi All,

Question: how does the computer represent -128 for byte data type in memory?

My question arises from the fact that most computers nowadays use 2's complement to store integral data types.

Now the algorithm to represent a negative number in computer is:
1. Discard the sign of the negative number, make it positive
2. Invert all the bits; this is the one's complement
3. Add 1 to the one's complement

But how can we represent 128, when the possible positive value for byte data type go up to only 127. So how does the computer store -128 in memory for the byte data type. Thanks.

Sheriff
Posts: 4313
very simply, it doesn't. As you said, a byte can only go from -128 to 127 inclusive.

If you need to store the number 128, you need to use a short (whose range is -32768 to 32767, inclusive).

Try it out. Create a simple for loop and print out the results -- what happens when you reach 128??

Pal Sudarshan
Ranch Hand
Posts: 52
I wasn't clear with my question.

How does the computer store -128 in memory?

Greenhorn
Posts: 29
1 byte = 8 bits

The relationship between the number of bits and how many binary values can be had using them is

87654321

2^82^72^62^52^42^32^22^1

What this means is, using 1 bit you can have 2^1 = 2 values. In other words, if there was only one bit to represent your data, you can only have one of the two values: Either a one, or a zero. If you had two bits, you would have 2^2 = 4 possible combinations to represent the data, and those would be: 00, 01, 10, 11 (0,1,2 and 3 in decimal). Likewise, using 8 bits you would have 2 ^ 8 possible combinations 00000000 through 11111111 (0 through 255 decimal). Now, if you were to represent negative numbers also using the same number of bits how would you do it? It's easy. Use the MSB (most significant bit, or the left most bit) as a sign bit. If we did that, we are left with 2^7 (128) possible combinations, and that includes a zero. So, now, based on the value of MSB, you identify whether it is a positive number or a negative one

MSB Lower bitsDecimal
0 0000000 0
01111111127
10000000-128
11111111-1

In general, we can say that with "n" number of bits, the integer values range from [-2^(n-1)] to [(2^(n-1)) - 1]
[ June 28, 2004: Message edited by: Anil Hulikal ]

Pal Sudarshan
Ranch Hand
Posts: 52
Thank you both.