public class Test {
public static void main(String... args) {
int i=010;
System.out.print(i);
}
}
đầu ra:Tại sao đầu ra 8 này?
8
Tại sao? Logic là gì?
public class Test {
public static void main(String... args) {
int i=010;
System.out.print(i);
}
}
đầu ra:Tại sao đầu ra 8 này?
8
Tại sao? Logic là gì?
0
là tiền tố cho số bát phân, giống như 0x
là tiền tố cho số thập lục phân (và 0b
là tiền tố cho số nhị phân, kể từ Java 7).
Vì vậy, 010
có nghĩa là 1 * 81 + 0 * 80
, là 8
.
Vì 010
, đây là bát phân.
Số nguyên nằm trong hệ bát phân vì bạn có 0 lúc bắt đầu.
Có một cái nhìn tại Java Language Specification, Chapter 3.10.1 Integer Literals
Một số nguyên theo nghĩa đen có thể được thể hiện bằng chữ số thập phân (cơ sở 10), thập lục phân (cơ sở 16), bát phân (cơ sở 8), hoặc nhị phân (cơ sở 2) .
Một số bát phân bao gồm một ASCII chữ số 0 theo sau là một hoặc nhiều của các chữ số ASCII từ 0 đến 7 xen kẽ với dấu gạch dưới, và có thể đại diện cho một số nguyên dương, bằng không, hay tiêu cực.
Đây là lý do tại sao 010
= 8
.
Sử dụng 0 tiền tố có nghĩa là bạn đang sử dụng số octal.
Trong Java và một số ngôn ngữ khác, bắt đầu bằng số nguyên với 0
được hiểu là số bát phân (cơ số 8).
Nếu bạn viết các số có nhiều chữ số quan trọng, bạn có thể bị nhầm lẫn bởi kết quả.
// octal to decimal
01 == 1
02 == 2
07 == 7
010 == 8
020 == 16
024 == 20
// octal to binary (excluding most significant bit)
01 == 1
02 == 10
07 == 111
010 == 1000
020 == 10000
024 == 10100
http://en.wikipedia.org/wiki/Octal – arshajii