As you know, all values within a computer are stored in as binary numbers, which are referred to as bits.
A bit holds a 0, or a 1. And, a byte is, usually, 8 bits.
And, an int value, in Java, occupies 32 bits—or 4 bytes—of memory.
For example here is 9, in binary.
00000000 00000000 00000000 00001001
In order to store a negative value, computers utilize the empty space to the left.
So, here is a −9 in binary.
11111111 11111111 11111111 11110111
This means that the largest value an int can contain is 2,147,483,647.
01111111 11111111 11111111 11111111
And, the lowest number, would be −2,147,483,648.
10000000 00000000 00000000 00000000
Thus, you'll find that on iteration 10 of your for-loop, the maximum value is surpassed, and "overloaded".
i = 0, number = 9, 1001
i = 1, number = 99, 1100011
i = 2, number = 999, 1111100111
i = 3, number = 9999, 10011100001111
i = 4, number = 99999, 11000011010011111
i = 5, number = 999999, 11110100001000111111
i = 6, number = 9999999, 100110001001011001111111
i = 7, number = 99999999, 101111101011110000011111111
i = 8, number = 999999999, 111011100110101100100111111111
i = 9, number = 1410065407, 1010100000010111110001111111111
i = 10, number = 1215752191, 1001000011101101110011111111111
1215752191
Here is the modified code, to produce the output.
int number = 0;
int[] num = {9,9,9,9,9,9,9,9,9,9,9};
for(int i=0; i<num.length; i++){
System.out.printf("i = %2d, ", i);
number = number*10 + num[i];
System.out.printf("number = %10d, ", number);
System.out.printf("%32s%n", Integer.toBinaryString(number));
}
System.out.println(number);
Java, as with many other coding languages, offers a 64 bit integer value, a long.
This will contain the 11 digits you're looking for.
Simply, change number to a long data-type.
long number = 0;
Output
i = 0, number = 9, 1001
i = 1, number = 99, 1100011
i = 2, number = 999, 1111100111
i = 3, number = 9999, 10011100001111
i = 4, number = 99999, 11000011010011111
i = 5, number = 999999, 11110100001000111111
i = 6, number = 9999999, 100110001001011001111111
i = 7, number = 99999999, 101111101011110000011111111
i = 8, number = 999999999, 111011100110101100100111111111
i = 9, number = 9999999999, 1001010100000010111110001111111111
i = 10, number = 99999999999, 1011101001000011101101110011111111111
99999999999
As a final note, Java offers the BigInteger, and BigDecimal classes, which will allow you to compute values without a constraint.
BigInteger number = BigInteger.ZERO;
int[] num = {9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9};
BigInteger numB;
for(int i=0; i<num.length; i++){
numB = new BigInteger(String.valueOf(num[i]));
number = number.multiply(BigInteger.TEN).add(numB);
}
System.out.println(number);
Output
999999999999999999999999999999999
int
?