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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王杰 黑马帝   /  2012-1-7 09:13  /  1603 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 苳眠 于 2012-1-7 19:59 编辑
  1. class Test01
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 System.out.println( (int)(char)(byte)-1 );
  6.         }
  7. }
复制代码
照理说,从int转换为byte在转换为char在转换为int.就是回到原点了呀.
那就应该还是-1呀.
我的运行结果却是65535
运行结果为什么不是-1???
我去网上查了,说是存储方式不同还有符号扩展.但是没有看懂.很疑惑

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

4 个回复

倒序浏览
这个是因为在计算机中负数的二进制码有关,另外int 型占四个字节32位而char型占2个字节16位,
int型-1的二进制码是32个1——“11111111111111111111111111111111 ”,
转换成char型后就成了16个1“1111111111111111 ”,
当再次进行强制转制的时候“1111111111111111 ”转换成int就成了“00000000000000001111111111111111 ”了也就是65535.

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

回复 使用道具 举报
所有数字在底层都是以二进制形式存在,注意不同类型各有多少位
回复 使用道具 举报
负数以补码形式存在
回复 使用道具 举报
李建平 发表于 2012-1-7 10:05
这个是因为在计算机中负数的二进制码有关,另外int 型占四个字节32位而char型占2个字节16位,
int型- ...

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