简单的基本数据类型,请帮忙看一下!

Tomcat4 2003-10-08 10:54:10
short b=(short)0xd403;
System.out.println("b="+b);
c=b<<3;
System.out.println("b<<3="+c);

请写出结果,并解释!
...全文
37 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
grgh2000 2003-10-08
  • 打赏
  • 举报
回复
这种强制转换有意义吗?
swinging 2003-10-08
  • 打赏
  • 举报
回复

由于0000 0000 0000 0000表示0,而它取反为1111 1111 1111 1111,
而二进制中1111 1111 1111 1111是-1
(注:以上位数都必须相同)
所以才有上面算法,数学上好像叫取补的,忘了。
happyegg 2003-10-08
  • 打赏
  • 举报
回复
第一位应该是符号位,那b应该是-(101 0100 0000 0011)=-21507啊

应该取补,所以是
-(010 1011 1111 1101) = -11261.结果是正确的,正确的溢出结果
grgh2000 2003-10-08
  • 打赏
  • 举报
回复
"short b=(short)0xd403;"JAVA已经不能正确转换,没有为什么的!
你把2升的液体放在体积只有1升的容器中,难道不溢出吗?
在给short类型分配内存时只有16位,而0xd403放不下啊^-^
swinging 2003-10-08
  • 打赏
  • 举报
回复
11261=0010 1011 1111 1101
-11261 = (0010 1011 1111 1101 - 1)的结果取反。
即:1101 0100 0000 0011
grgh2000 2003-10-08
  • 打赏
  • 举报
回复
运行结果如下:
b=-11261  由于0xd403(=54275)大于0x7fff(=32767)导致溢出,结果不正确。
b<<3=-90088  b<<3相当于b*8

Tomcat4 2003-10-08
  • 打赏
  • 举报
回复
short b=(short)0xd403;
b的一进制:1101 0100 0000 0011
第一位应该是符号位,那b应该是-(101 0100 0000 0011)=-21507啊
可是运行结果是-11261,请为什么?希望今晚就解决!
pleonheart 2003-10-08
  • 打赏
  • 举报
回复
晕死,看了半天竟然没看出是十六进制,我完了
swinging 2003-10-08
  • 打赏
  • 举报
回复
short的最大值:Short.MAX_VALUE = 0x7fff
而:0xd403 > 0x7fff

溢出。计算结果可想而知。

实际:实际:b<<3=434200,使用LONG类型可以搞定。
Tomcat4 2003-10-08
  • 打赏
  • 举报
回复
short b=(short)0xd403;
System.out.println("b="+b);
int c=b<<3;
System.out.println("b<<3="+c);

请写出结果,并解释!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧