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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梁志仲 中级黑马   /  2012-8-25 15:10  /  2143 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

将long类型的32768转换成short类型,结果居然是-32768。
原理是什么呢?

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

5 个回复

倒序浏览
内存溢出了
整型:byte(1个字节)short(2个字节)int(4个字节)long(8个字节)
short装不下long那么大的
short 最大值才是2的15次幂-1
long的是2的63次幂-1

内存溢出了
回复 使用道具 举报
32768=(1000 0000 0000 0000)2转换成short,则最高位的1变成符号位,于是是负数,所以是补码表示的,取反+1转换为十进制再加上负号就可以了。0111 1111 1111 1111 + 1 = 1000 0000 0000 0000=(32768)10加上负号就是-32768于是转换为short的结果就是-32768long+int=long

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

回复 使用道具 举报
long型是8个字节64位
short是2个字节16位。
long=32768 的二进制: 1000    0000   0000  0000 因为最高位还是0,所以是正数。
变成short之后只有16位 :1000 0000 0000 0000 因为最高位是1,所以是负数。-1然后取反.就是:
(-1)是:0111 1111 1111 1111 1111取反 1000 0000 0000 0000,还是32768,
所以其short型是-32768

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1

查看全部评分

回复 使用道具 举报
short的取值范围是-32768~32767,32768超出了它的取值范围。告诉你个经验:像这种将超出范围的值强制转换后,它的结果为最小负数加上超出范围的值再减1。如32768转换成short结果就为:-32768+(32768-32767)-1=-32768。如果你是将32769转换成short类型,结果就为-32768+(32769-32767)-1=-32767。

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1

查看全部评分

回复 使用道具 举报
内存溢出了 数据在计算机存储时都是用补码的形式存储的 其中最高位表示符号位 long型的是64个字节即1000 0000 0000 0000前还有好多的0 而short是16字节刚好是这个值 最高位的1表示符号 所以就是-32768
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马