Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does the range of int has a minus 1?

I read that the range of an int is dependent on a byte.

So taking int to be 4 bytes long, thats 4 * 8 bits = 32 bits.

So the range should be : 2 ^ (32-1) = 2 ^ (31)

Why do some people say its 2^31 - 1 though?

Thanks!

like image 436
JoC Avatar asked Oct 12 '13 11:10

JoC


People also ask

Why is the integer range 32767?

The minimum range required by C is actually -32767 through 32767, because it has to cater for two's complement, ones' complement and sign/magnitude encoding for negative numbers, all of which the C standard allows. See Annex E, Implementation limits of C11 (and C99) for details on the minimum ranges for data types.

Why is the range of a byte to 127?

This is because we have to represent the number 0, so inclusively 0-127 is the other 128 possibilities of our range. If we were only allowing positive values, such as an unsigned byte where negative numbers aren't possible, the range would be 0-255, since these are 256 different values (including the 0).

What is the range of int in power of 10?

The INTEGER data type stores whole numbers that range from -2,147,483,647 to 2,147,483,647 for 9 or 10 digits of precision.


2 Answers

Because the counting starts from 0

And the range of int is 2,147,483,647 and 2^32 which is 2,147,483,648. hence we subtract 1

Also the loss of 1 bit is for the positive and negative sign

Check this interestinf wiki article on Integers:-

The most common representation of a positive integer is a string of bits, using the binary numeral system. The order of the memory bytes storing the bits varies; see endianness. The width or precision of an integral type is the number of bits in its representation. An integral type with n bits can encode 2n numbers; for example an unsigned type typically represents the non-negative values 0 through 2n−1. Other encodings of integer values to bit patterns are sometimes used, for example Binary-coded decimal or Gray code, or as printed character codes such as ASCII.

There are four well-known ways to represent signed numbers in a binary computing system. The most common is two's complement, which allows a signed integral type with n bits to represent numbers from −2(n−1) through 2(n−1)−1. Two's complement arithmetic is convenient because there is a perfect one-to-one correspondence between representations and values (in particular, no separate +0 and −0), and because addition, subtraction and multiplication do not need to distinguish between signed and unsigned types. Other possibilities include offset binary, sign-magnitude, and ones' complement.

like image 173
Rahul Tripathi Avatar answered Nov 12 '22 15:11

Rahul Tripathi


You mean 232-1, NOT 232-1.

But your question is about why people use 231. The loss of a whole bit is if the int is a signed one. You lose the first bit to indicate if the number is positive or negative.

A signed int (32 bit) ranges from -2,147,483,648 to +2,147,483,647. An unsigned int (32 bit) ranges from 0 to 4,294,967,295 (which is 232 -1).

like image 42
David M Avatar answered Nov 12 '22 15:11

David M