为什么将 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 使用 16
位 char
s。
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
.
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 使用 16
位 char
s。
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
.