【问题标题】:How can an int be declared with ' ' and why is '2' == 50?如何用''声明一个int,为什么'2'== 50?
【发布时间】:2015-09-28 10:57:34
【问题描述】:

问题是:控制台会显示什么?

而且我的理解确实有些问题。

代码如下:

public static void felda(){
    char[] felda = {'2',0x31,48};
    for (int i = 0; i< felda.length; i++){
        System.out.println(" : " + felda[i]);
    }
    System.out.println();
}
public static void feldb(){
    int[] feldb = {'2',0x31,48};
    for (int i = 0; i< feldb.length; i++){
        System.out.println(" : " + feldb[i]);
    }
    System.out.println();
}
public static void feldc(){
    int [] feldc = {'2',0x31,48};
    for (int i = 0; i< feldc.length; i++){
        System.out.println(" : " + (char) feldc[i]);
    }
    System.out.println();
}

所以如果我在解决方案中运行是:

: 2
: 1
: 0

: 50
: 49
: 48

: 2
: 1
: 0

所以我不明白怎么可能用''定义一个int。 而且我发现int feldb = '2' 的结果是 50 和 int feldb=0x31 的结果是 49 是如何令人困惑的......这一切都太令人困惑了。我希望有人能启发我。

编辑:为什么char feldc = 48; 导致为 0?

【问题讨论】:

标签: java arrays char int


【解决方案1】:

在 Java 中,char 表示 Unicode 字符。但它实际上也是一个无符号整数,占 2 个字节,可以从 0 到 216 - 1。

所以,

char c = '2';

用字符“2”初始化c。而字符 '2' 的数值,在 Unicode 中是 50。

因此,如果您将其打印为字符,则会打印“2”。如果将其打印为数值(作为 int,使用int c = '2'),将打印 50。

做的时候

char feldc = 48; 

您使用数字 Unicode 值为 48 的字符初始化 feldc,并且该字符是字符“0”。因此它相当于

char feldc = '0';

0x31 是一个写成十六进制文字的数字(这就是 0xprefix 的含义)。当您写31 时,该值是十进制的。它等于 1 * 100 + 3 * 101

在十六进制中,基数是 16 而不是 10。所以0x31 等于 1 * 160 + 3 * 161,等于 49 .

【讨论】:

    【解决方案2】:

    50 是 '2' 字符的 ASCII 值。像这样定义它不是数字 2 .. 它给出了一个字符的 ASCII 值。查看此 ASCII 表并找到 '2' 字符

    http://ascii.cl/index.htm?content=mobile

    【讨论】:

    • 从技术上讲,它不是给出字符的 ASCII 值,而是给出字符的 Unicode 代码点。他们只是碰巧是一样的。
    猜你喜欢
    • 2020-08-24
    • 2011-05-15
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 2020-05-30
    • 1970-01-01
    相关资源
    最近更新 更多