请教一道关于数据类型转换的题目 System.out.println((int)(char)(byte)-1);为什么输出结果是65535?byte向char转换,以及char向int转换时区别怎么这么大?恳请知道的高手给予解答,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 (byte)-1是8个1,此时仍然等于-1转换成char就是16个1,char没有符号,等于65535再换成int,前面补16个0,还是65535 关键是byte转char,它不是widening primitive conversion,而是windening and narrowing primitive conversion,因为无法用一个负数去表示一个无符号数char,这样就等于把原数变大了 Java中的数据是以补码的形式储存的 整个过程把整型-1转换为65535,int占8个字节,二进制表示32位,在计算机中是11111111111111111111111111111111,有符号转换为byte时,byte占4个字节,二进制16位,计算机中是上述一半,1111111111111111,有符号转换为char时,char占4个字节,16位,表示为1111111111111111,无符号然后转换为int,int占8个字节,32位,表示为00000000000000001111111111111111最终结果为65535参考文章: Java中的byte http://blog.csdn.net/nethibernate/article/details/5578911 是不是在byte-->char-->int的过程中,高位都是补的原来的符号位?而因为char是无符号,所以高位都是补0? 6楼nice 分享的文章不错! -1最先是一个int类型的数据100000000 00000000 000000000 000000001(byte)-1得到 100000001(char)-1 因为 会自动扩展符号位得到10000000 00000001反码得到11111111 11111110补码11111111 11111111 由于char是 无符号的,所以计算方式是2^16 + 2^15+2^14+。。+2^2+2^1+2^0根据等比数列公式 Sn=a1(1-q^n)/(1-q) = 1*(1-2^16)/(1-2) = 2^16 - 1 = 65536 - 1 = 65535 (本质....数据类型的长度也是这么计算)PS. 如果 short 那就不一样了! 首位是符号位了。将其转换为int得到000000000 00000000 11111111 11111111 = 65535 线程同步问题,高手看看啊,哪里有问题啊,谢谢了 前提只能用java代码实现,因为一切都是动态的。 如何将unicode格式文本解析出 word 用 streamTokenizer? 接口里定义了这个,什么意思? linux下JAVA串口编程 如何给button 加的java快捷键(快捷键 为CTRL+C) 一个页中怎样插入多个Applet,两个Applet之间怎样进行数据等通信呢。。。 为什么运行后不能显示图形界面? 自定义函数调用问题 如何做一棵动态的树???? 类中用本类中的非静态方法需要对象吗 java泛型重载的问题
转换成char就是16个1,char没有符号,等于65535
再换成int,前面补16个0,还是65535
Java中的byte
http://blog.csdn.net/nethibernate/article/details/5578911
分享的文章不错!
100000000 00000000 000000000 000000001(byte)-1得到 100000001(char)-1 因为 会自动扩展符号位
得到
10000000 00000001
反码得到
11111111 11111110
补码
11111111 11111111 由于char是 无符号的,所以计算方式是2^16 + 2^15+2^14+。。+2^2+2^1+2^0
根据等比数列公式 Sn=a1(1-q^n)/(1-q) = 1*(1-2^16)/(1-2) = 2^16 - 1 = 65536 - 1 = 65535 (本质....数据类型的长度也是这么计算)
PS. 如果 short 那就不一样了! 首位是符号位了。将其转换为int得到
000000000 00000000 11111111 11111111 = 65535