oka*_*ami 21 java bit twos-complement
为什么byte b = (byte) 0xFF等于integer -1?
例如:
int value = byte b = (byte) 0xFF;
System.out.println(value);
Run Code Online (Sandbox Code Playgroud)
它会打印-1吗?
也许你的困惑来自为什么(byte)0xFF在某种程度上等于(int)0xFFFFFFFF.这里发生的是从较小到较大的有符号类型的升级导致较小的值被符号扩展,从而最高有效位被复制到提升值的所有新位.无符号类型不会变为符号扩展,它们会被零扩展,新位将始终为零.
如果它可以帮助你吞下它,可以这样想,任何大小的每个整数也都有一些"幻像"位太重要而无法表示.他们在那里,只是没有存储在变量中.负数具有非零值,当您将较小的值提升为较大的值时,正数对于幻像位全为零,这些幻像位变为实数位.
如果您使用有符号 int,则由于 2 补码,0xFF = -1。
这篇维基文章解释得很好,请参阅右侧的表格: http ://en.wikipedia.org/wiki/Two%27s_complement