Почему " 010 " равно 8?

мой простой вопрос почему:

System.out.println(010|4);

печать "12"? Я понимаю побитовый оператор OR, но почему " 010 " равно 8? Это определенно не уведомление compliment 2, так как декодировать это число?

4 ответов


посмотреть Спецификация Языка Java, Глава 3.10.1 Целочисленные Литералы

целочисленный литерал может быть выражен в десятичной (основание 10), шестнадцатеричной (основание 16), восьмеричной (основание 8), или двоичной (основание 2).

[...]

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

теперь вы должны понять, почему 010 is 8.


ведущий 0 обозначает восьмеричное числовое значение так что значение 010 можно декодировать следующим образом:010 = 1 * 81 + 0 * 80 = 8


это потому, что java принимает его как восьмеричный литерал и, следовательно, производит 12. Попробуй!--0--> и результат 14. Потому что на этот раз он принимается как десятичный литерал.


как все здесь упоминали, что 010 это Восьмеричный целочисленный литерал . Ведущий 0 указывает, что это восьмеричное представление . Фактическое значение будет :

1*8^1 + 0*8^0 = 8(decimal) = 1000 (binary-только последние 4 цифры)

теперь вернемся к СОП:

System.out.println(010|4);

применение побитовое или на 010 и 4(учитывая только последние 4 цифры)=>

1000/0100

= 1100

= 1*2^3 + 1*2^2 + 0*2^1 + 0*2^0

= 8 + 4 + 0 + 0

= 12(десятичных)