程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

为什么`short a = (byte)32767` 变成-1?

发布于2021-09-18 03:13     阅读(1230)     评论(0)     点赞(8)     收藏(1)


以下 Java 程序的输出是如何计算的?

class hello {
    public static void main(String args[]){ 
        short a=(byte)32767;
        System.out.println(a);      
    }
}

解决方案


整数常量 32767 是十六进制的 0x00007FFF。

Abyte是有符号的 8 位类型。强制转换(byte)0x00007FFF有效地截断了高 24 位,留下 0xFF。

因为它是有符号的,所以这代表 -1。将其重新分配给 ashort不会更改该值,因为它已被转换为 a byte,并且 -1 在 a 的范围内short评价主要是:

short a = (byte)32767;
short a = (byte)0x00007FFF;
short a = (byte)0xFF (= (byte)(0x00007FFF & 0x000000FF));
short a = -1;

或者,二进制,如果您愿意(因为其他人已经提到过):

      32767 = 00000000 00000000 01111111 11111111 (type is int)
(byte)32767 = ^-- these are dropped. --^ 11111111 (type is byte)
to short    =                   11111111 11111111 (value is signed [-1], sign extends)

重要的是要记住它byte是有符号的,因此在扩展为 a 时会保留符号的short如果byte是无符号(范围 0-255),则该值将是 255,结果short将是00000000 11111111(255)。



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.javaheidong.com/blog/article/286973/252ec5a1f0e09d1ddb5b/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

8 0
收藏该文
已收藏

评论内容:(最多支持255个字符)