日期:2014-05-20  浏览次数:20698 次

关于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 等等 都变成 问号 是因为你的操作系统没有相应的字库 所以显示问号