2014-02-12 2 views
1

Я смущен, почему это так, и я не могу найти ответ, почему. Это из задания:3 * 012 = 30, а не 36. Почему?

x=1, y=2, z=3; 

z=(int)(x/y*3.0+z*012); 

System.out.printf("%d %d %d", x, y, z); 

Ответ:

1 2 30; << from eclipse 

Как я прибыл сюда:

(1/2) = 0 * 3.0 = 0 + (z*012)= 30. Я хотел сказать 36, но я думаю, что это 30 в соответствии с IDE.

+3

Подсказка: '012! = 12'. – user2864740

ответ

10

012 восьмеричный число не десятичное, которое десятичное значение равно 10.

z=(int)(x/y*3.0+z*012); 

это равняется -

z=(int)(1/2*3.0+3*10); 
  • Для справки

Числовой начинается с 0 восьмеричным числом ,
Числовое число начинается с 0x - это шестнадцатеричное число.
Числовые начинается с 0b или OB является двоичным числом (Так как Java издание 7 - Binary Literals).

+1

Благодарим вас за быстрый ответ. Почему мой профессор не указал на это, это очень странно для меня ... если это не так) – JD112

4

В Java и несколько других языках, целое число буквальное начало с 0 интерпретируются как восьмеричное (base 8) количества. Здесь 012 это восьмеричное число, которое имеет значение десятичного ф 10

Так что ваше умножение придет, как

z = (int) (1/2 * 3.0 + 3 * 10); 

От JLS

Восьмеричная цифра состоит из ASCII цифры 0 следуют один или более цифр ASCII от 0 до 7, чередующихся с символами подчеркивания, и может представлять положительное, нулевое или отрицательное целое число.

3

012 является восьмеричный, потому что она начинается с 0:

012 = (0 * 8^2) + (1 * 8^1) + (2) = 10 

Поэтому:

012 * 3 = 10 * 3 = 30 

Примечания:

  • Помните, что восьмеричное является онемение er в базе 8 (десятичная база 10), поэтому она не может иметь цифры, большие или равные 8.
  • Аналогично, шестнадцатеричные числа начинается с 0x, например: 0x12 = 1*16 + 2 = 18
+0

можете добавить круглые скобки, это объяснит лучше –

2

Смотрите JLS:

Восьмеричная позицией состоит из ASCII цифр 0 с последующим одним или несколькими в ASCII цифры от 0 до 7, чередующиеся с символами подчеркивания, и могут представляют собой положительное, нулевое или отрицательное целое число.

Так,

012 = 0 * 8 + 1 * 8 + 2 * 8 = 10

В Java 7, вы можете использовать underscores in numeric literals, которые могли бы поможет вам прервать значение.

Смежные вопросы