首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

关于java处理负数的有关问题

2011-12-30 
关于java处理负数的问题我用c语言转换一个负数,如:inti-156printf( %c\n ,i)输出a。但是如果用java语

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

热点排行