黑马程序员技术交流社区

标题: 它到底会打印出什么呢? [打印本页]

作者: 郭沐昌    时间: 2013-4-5 17:32
标题: 它到底会打印出什么呢?
本帖最后由 郭沐昌 于 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,何解呢?
作者: ㄨ____陌生    时间: 2013-4-5 17:44
因为byte是有符号的类型,所以在将byte数值-1(二进制为:11111111)提
升到char时,会发生符号位扩展,又符号位为1,所以就补8个1,最后为16个1;然后从char到int的提升时,由于是
char型提升到其他类型,所以采用零扩展而不是符号扩展,结果int数值就成了65535。

作者: 邵震    时间: 2013-4-5 17:47
本帖最后由 邵震 于 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

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



作者: 邵震    时间: 2013-4-5 17:50
short的上限应该是65535啊

作者: 沈浩    时间: 2013-4-5 18:48
这是因为char类型在内存中的取值不存在负数范围,当从char型提升到int型时,高位都会补0.
作者: 郭沐昌    时间: 2013-4-5 19:15
邵震 发表于 2013-4-5 17:47
(byte)-1
(char)(byte)?
(int)(char)(byte)65535  你转换的短整型byte  字符型char  整型 int  应该是和cha ...

216-1:lol
作者: 郭沐昌    时间: 2013-4-5 19:16
ㄨ____陌生 发表于 2013-4-5 17:44
因为byte是有符号的类型,所以在将byte数值-1(二进制为:11111111)提
升到char时,会发生符号位扩展,又 ...

作为结果的 char 数值的 16 个位就都被置位了,因此它等于 216-1=65535
作者: 黄玉昆    时间: 2013-4-5 20:10
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2