2 kingleest kingLeeST 于 2016.09.25 00:40 提问

Java中byte和short类型初始化时最高位不能为1

Java中byte和short类型初始化时最高位不能为1,如果为1的话编译会出错,提示从int转换到byte会有损失,例如:我这样写 short ashort = 0xFFFF就会编译时出问题

4个回答

lovingning
lovingning   2016.09.25 02:24
已采纳

编译是可以通过的。在java中:
int 转为byte,只是简单的截取后八位,有可能会数据出错。
byte转为int,是将八位扩展为int类型32位数据,后七位不变,前面的25位根据byte最高位来决定。

所以一般byte转int时,都进行如下操作:
byte b=0xff;
int num=b&0xff;

caozhy
caozhy   Ds   Rxr 2016.09.25 02:21

用ushort或者ubyte,或者 short ashort = -1; // 0xffff

kingLeeST
kingLeeST   2016.09.25 10:48

后来尝试发现byte和short在使用十六进制进行赋值时,只能赋值进行这样的幅值:
byte aByte = ±0x(00~7f)和-0x80;
short aShort = ±0x(0000~7fff)和-0x8000;
具体原因不太清楚了

Canhui_WANG
Canhui_WANG   2016.09.25 12:17

整型的每一种都分有无符号(unsigned)和有符号(signed)两种类型,默认是signed。比如您上面说的byte aByte = ±0x(00~7f)和-0x80;
short aShort = ±0x(0000~7fff)和-0x8000; 完整的写法是signed byte aByte = ±0x(00~7f)和-0x80;signed short aShort = ±0x(0000~7fff)和-0x8000.其中,signed和unsigned的区别就是无符号类型能保存2倍于有符号类型的正整数数据,比如16位系统中一个int能存储的数据的范围为-32768~32767,而unsigned能存储的数据范围则是0~65535。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!