Почему " 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(десятичных)