24

我正在使用 Eclipse 在 Android 中开发应用程序。我编写了以下代码并在测试中第一个和第三个“ if ”块不可访问。为什么?

当我将前导零添加到数字时,等号运算符返回 false。

int var = 123;
if (var == 0123) {
    //not reachable
}
if (var == 123) {
    //reachable
}
if (var == (int)0123) {
    //not reachable
}
if (var == (int)123) {
    //reachable
}
4

3 回答 3

55

0123是八进制数(前导 0),而123是十进制数。

所以 0123 实际上等于 83。

于 2012-05-05T11:41:06.963 回答
22

任何以零开头的整数都是八进制数(以 8 为基数)。

0123是八进制数并且123是十进制数

 0123 = (3*8^0) +(2*8^1)+(1*8^2)+(0*8^4)
        =3+16+64+0
        =83   
于 2012-05-05T11:42:47.867 回答
9

因为 0123 不是十进制数字,它的八进制(以 8 为底)所以这等于 83

要将数字 k 转换为十进制,请使用定义其 base-8 表示的公式:

在此处输入图像描述

0123 base-8 = 83 decimal

0123 = (3*8^0) +(2*8^1)+(1*8^2)+(0*8^4)
     =3+16+64+0
     =83   

八进制数字由一个 ASCII 数字 0 后跟一个或多个 ASCII 数字 0 到 7 组成,可以表示正整数、零整数或负整数。

注意:八进制值在 java 中用前导零表示,普通十进制数不能有前导零

于 2012-05-05T11:43:25.927 回答