社区
Java SE
帖子详情
关于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
打赏
收藏
关于java处理负数的问题
我用c语言转换一个负数,如: int i = -156; printf("%c\n", i); 输出a。 但是如果用java语言,如: int i = -156; System.out.println((char)i); 为什么输出?(问号)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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 码 就是 ?号
java
中
负数
_
Java
中
负数
以及类型转换
问题
学习过
java
的都知道,在
java
中,不是直观的表示
负数
,而是采用补码的形式表示
负数
。 这是为了硬件操作的方便,把减法也转换成加法来运算。 那补码是怎样表示的呢?为了得到补码,我们引入了反码。 对于正数来讲,它的反码补码都为本身,如果不明白为什么,我学习过
java
的都知道,在
java
中,不是直观的表示
负数
,而是采用补码的形式表示
负数
。这是为了硬件操作的方便,把减法也转换成加法来运算。那补码是怎样表...
Java
负数
存储方式
正数的原码、反码、补码是相同的。
负数
的原码是去掉最高的符号位的其他位, 后面的位取反为反码,反码+1后为补码。 算法为:
负数
的绝对值(原码)= 取反(补码-1)。
java
中以int为例来实现算法: [code="
java
"]int i = -63; System.out.println(Integer.toHexString(i)); //算法在这里: Sy...
Java
中
负数
计算原理原码、反码和补码:如int类-1为32个1组成
Java
中
负数
存储原理/原码、反码和补码
为什么对
Java
中的
负数
取绝对值结果不一定是正数?
这是因为在
Java
中,有符号整数使用补码(two's complement)表示法,导致某些情况下,对
负数
取绝对值时,其结果仍为
负数
。类型,这种情况不会发生,因为它们使用的是IEEE 754浮点数表示法,取绝对值时,结果总是非
负数
。
负数
的补码表示:在补码表示法中,
负数
的补码是其对应正数按位取反(0变1,1变0)后加1。类型的最大值范围,这导致取绝对值后的结果仍为
负数
。
Java
中对
负数
取绝对值结果不一定是正数的情况非常罕见,仅仅发生在。类型的最小
负数
,可以根据实际需求
处理
这种特殊情况。方法时检查其输入值。
java
负数
右移_
Java
中
负数
的右移
我们知道,在
Java
中常用的位移运算有三种,分别是:<>(带符号右移)和>>>(无符号右移)。这一次,我们来看一下其中的带符号右移运算符>>在
负数
计算时的效果。首先,是一段测试代码:public static void main(String[] args) {int num = -10;System.out.println(num >> 1)...
Java SE
62,614
社区成员
307,327
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章