关于java处理负数的问题
我用c语言转换一个负数,如:
int i = -156;
printf( "%c\n ", i);
输出a。
但是如果用java语言,如:
int i = -156;
System.out.println((char)i);
为什么输出?(问号)
[解决办法]
因为Java里面 char 是 不能为负的
-156 转换为 char 就是63 对应的 ascii 码 就是 ?号
[解决办法]
int 是 32位
-156 的 二进制表示是它的绝对值 156 的每一位 取反 再 加 1 (反码)
156 = 0000 0000 0000 0000 0000 0000 1001 1100
每一位取反
变成 :1111 1111 1111 1111 1111 1111 0110 0011
再加一 :1111 1111 1111 1111 1111 1111 0110 0100
因为char是 16位 所以 取后面 16位
1111 1111 0110 0100 = 65380 = 0xff64
不光是这个-156 变成问号
而且很多数 -155 等等 都变成 问号 是因为你的操作系统没有相应的字库 所以显示问号