Java初学者此处数据类型简短
嗨,我只是有一个关于隐式转换的数据类型short的问题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 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补整数。