A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© fengche 中级黑马   /  2013-10-16 10:03  /  2223 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 fengche 于 2013-10-16 12:12 编辑

public class Demo{
        public static void main (String[] args){
                System.out.println((int)(char)(byte) -1);
        }
}
它打印出来的是65535而不是-1,这是为什么呢?

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1

查看全部评分

3 个回复

倒序浏览
你这样写的目的是什么呢?
数据类型之间的转换分为隐含类型转换(或称默认类型转换 )和强制类型转换两种。
自动类型转换按字节长度从“短”到“长”的优先关系依次为:
byte ---- short ---- int ---- long ----float ---- double
byte short char数据类型之间不能互相转换 都可以转成int型
强制类型转换 在变量名前面加上欲转换的类型,程序运行时就会自动将此行语句里的变量做类型转换的处理,并不影响原先定义的类型;
例:byte  a=10;  int b=20; byte c=a+(byte)b    c的输出结构为30
如果不定义数据类型 x=100; 那么变量x 默认的数据类型为int 数字默认
的数据类型为int型。

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1

查看全部评分

回复 使用道具 举报
在(int)(char)(byte) -1中
(byte) -1 --》10000001--》补码--》11111111,高位是符号位
(char)(byte) -1 --》char两字节,byte才一字节,补成两字节,按符号位补成11111111 11111111
(int)(char)(byte) -1 --》11111111 11111111 --》二进制转int便是65536了
其实-1从char转就可以了,(int)(char)-1 = 65536

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马