关于java处理负数的问题

youhaodeyi 2007-02-06 09:32:33
我用c语言转换一个负数,如:

int i = -156;
printf("%c\n", i);
输出a。

但是如果用java语言,如:
int i = -156;
System.out.println((char)i);
为什么输出?(问号)
...全文
1708 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
youhaodeyi 2007-02-07
  • 打赏
  • 举报
回复
那c语言中如何处理-156呢?它和java的处理方法有什么不同?
luyang1016 2007-02-07
  • 打赏
  • 举报
回复
ls 学习了!
interpb 2007-02-07
  • 打赏
  • 举报
回复
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 等等 都变成 问号 是因为你的操作系统没有相应的字库 所以显示问号
hz_80 2007-02-07
  • 打赏
  • 举报
回复
不好意思,说错了,char Java里是两个字节,16位,但是ascII编码是一个字节,8位的
hz_80 2007-02-07
  • 打赏
  • 举报
回复
int 4个字节,32位,char是一个字节,8位,变换的是ascII码,在0x00~0x7f之外的的数字都是输出"?"的
JAVA3VB 2007-02-07
  • 打赏
  • 举报
回复
说起来真惭愧,学JAVA一年了,对于上面的基础问题真的不清楚!
希望正解
youhaodeyi 2007-02-07
  • 打赏
  • 举报
回复
我还是不明白呀,int在java中是多少位?值为-156的int变量转换为char的为什么是“?”。
wshong 2007-02-06
  • 打赏
  • 举报
回复
楼上真解,因为char在c中的是一个字节,在java中是两个字节
对于c中256 + (-156) = 100 为d的asiII码,应该输出的是d,你的也不对哦~
不知道我的理解有没有错
也是刚学java
「已注销」 2007-02-06
  • 打赏
  • 举报
回复
char 的范围是 0~65535
-156 转成char 应该是 65536-156=65380
eric_ranch 2007-02-06
  • 打赏
  • 举报
回复
int i=-156在java中为1000 0000 0000 0000 0000 0000 1001 1011=-156
(char)i 取16bit 0000 0000 1001 1011为正了=145
我对应的输出为 、
interpb 2007-02-06
  • 打赏
  • 举报
回复
不好意思 我想当然了

-156 转换成 char 对应的 值是65380

因为 输出时 对应的字符编码 没有相应字符 所以 就输出一个问号
yifuzhiming 2007-02-06
  • 打赏
  • 举报
回复
-156就是ascii ?
youhaodeyi 2007-02-06
  • 打赏
  • 举报
回复
为什么-156转换成char就是63?有什么换算方法吗?
interpb 2007-02-06
  • 打赏
  • 举报
回复
因为Java里面 char 是 不能为负的

-156 转换为 char 就是63 对应的 ascii 码 就是 ?号

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧