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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郭沐昌 中级黑马   /  2013-4-5 17:32  /  1573 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 郭沐昌 于 2013-4-6 01:38 编辑
  1. public class Multicast{

  2. public static void main (String[] args){


  3. System.out.println((int)(char)(byte) -1);

  4. }
  5. }
复制代码
第一个转型将数值从 32到 了 8 位,
第二个转型将数值从 8 到了 16 位,
最后一个转型又将数值从 16 位回了 32 位。
打印出来的竟然是65535,何解呢?

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

7 个回复

倒序浏览
因为byte是有符号的类型,所以在将byte数值-1(二进制为:11111111)提
升到char时,会发生符号位扩展,又符号位为1,所以就补8个1,最后为16个1;然后从char到int的提升时,由于是
char型提升到其他类型,所以采用零扩展而不是符号扩展,结果int数值就成了65535。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 邵震 于 2013-4-5 17:52 编辑

(byte)-1
(char)(byte)?
(int)(char)(byte)65535  你转换的短整型byte  字符型char  整型 int  应该是和char有关
(int)(byte)-1
(int)(char)65535
(char)?
(int)-1

看看我帮你改的  各种转换的结果


回复 使用道具 举报
short的上限应该是65535啊
回复 使用道具 举报
这是因为char类型在内存中的取值不存在负数范围,当从char型提升到int型时,高位都会补0.

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 鼓励鼓励

查看全部评分

回复 使用道具 举报
邵震 发表于 2013-4-5 17:47
(byte)-1
(char)(byte)?
(int)(char)(byte)65535  你转换的短整型byte  字符型char  整型 int  应该是和cha ...

216-1:lol
回复 使用道具 举报
ㄨ____陌生 发表于 2013-4-5 17:44
因为byte是有符号的类型,所以在将byte数值-1(二进制为:11111111)提
升到char时,会发生符号位扩展,又 ...

作为结果的 char 数值的 16 个位就都被置位了,因此它等于 216-1=65535
回复 使用道具 举报
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马