为什么将 10000000 转换为 char 时得到 38528?

Why do I get 38528 when casting 10000000 to char?

Java 字符类型使用 32 位 - 因此最大值为 65536。

但是下面的代码给了我标题中报告的结果。

public static void main(String[] args) {
    int a = 10000000;
    char b = 33;
    b = (char)a;
    System.out.println((int)b);

}

Java uses 32 bits for the char tipe

不,Java 使用 16chars。

so the max value is 65536.

差不多 - 就char的最大值而言,它是65535,但是,2s-complement 32位值的最大值是231 ,也就是2147483647.

But the following code give me the result reported in the title.

int a = 10000000;
char b = 33;
b = (char)a;

嗯,10000000 肯定大于 65535,不是吗?当您尝试将该数字放入 char 时,您期望得到什么?你得到的是一个 overflow.

一个char是16位,不是32位。

65535是一个char的最大值,而10000000大于那个,所以你不能把这个值存入一个char.

10000000 在二进制中是 100110001001011010000000

现在,当将其转换为 char 时,"fit" 的 16 位左侧的所有位都将被丢弃,只剩下 1001011010000000

而二进制1001011010000000十进制是38528.