Java初学者此处数据类型简短

Java初学者此处数据类型简短,java,Java,嗨,我只是有一个关于隐式转换的数据类型short的问题 这里说short n=99999将等于值-31073。为什么它等于那个数字?短路的最小可能数为-32768,最大可能数为32767(含)。还有,我不明白为什么这是负面的 二进制形式的整数值99999: 1 1000 0110 1001 1111 正如您所见,它需要更多的15位二进制数字(+1用于+/-符号的保留) 可以存储类型为short的值 因此,当您在16位空间中“压缩”该值时,您将得到最后16位二进制数字: 1000 0110 10

嗨,我只是有一个关于隐式转换的数据类型short的问题


这里说
short n=99999将等于值-31073。为什么它等于那个数字?短路的最小可能数为-32768,最大可能数为32767(含)。还有,我不明白为什么这是负面的

二进制形式的整数值
99999

1 1000 0110 1001 1111
正如您所见,它需要更多的15位二进制数字(+1用于+/-符号的保留)
可以存储类型为
short
的值
因此,当您在16位空间中“压缩”该值时,您将得到最后16位二进制数字:

1000 0110 1001 1111
这等于
-31073
short

  • Java中的
    int
    short
    等基本类型都是有符号的,除了
    char
  • short
    在Java中是16位有符号整数

    然后,对于
    short
    整数
    32767
    ,内部二进制文件如下所示:

    01111111 11111111
    
    当我们在这个数字上加1,我们得到这个二进制:

    10000000 00000000
    
    如果我们把它读作带符号的short,那么它就是
    -32768

    然后我们可以得到这个映射:

    0 -> 0
    1 -> 1
    2 -> 2
    ...
    32766 -> 32766
    32767 -> 32767
    32768 -> -32768 // This is called "overflow"
    32769 -> -32767
    ...
    65534 -> -2
    65535 -> -1
    65536 -> 0
    65537 -> 1
    ... // loop
    

    对于“short”99999,可以先将其减少为34463(=99999%65536),然后由于此映射,应从65536中减去32768和65535之间的任何数字,然后将34463映射到最终结果
    -31073
    short n=99999无法编译。。。显示您的代码以更好地说明您的描述。这里显示短n=99999,它表示确切的位置?这不是编译。哦,不。这只是我试图回答的一个练习。没有涉及任何代码片段。顺便说一句,-31073是解决方案。谢谢!!我完全忘了short是一个16位带符号的2补整数。