kingLeeST
kingLeeST
采纳率100%
2016-09-24 16:40

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

已采纳

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

4条回答

  • lovingning mnlin 5年前

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

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

    点赞 评论 复制链接分享
  • Canhui_WANG 林微 5年前

    整型的每一种都分有无符号(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。

    点赞 评论 复制链接分享
  • kingLeeST kingLeeST 5年前

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

    点赞 评论 复制链接分享
  • caozhy 回答这么多问题就耍赖把我的积分一笔勾销了 5年前

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

    点赞 评论 复制链接分享