引用自甲骨文网站 http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html“byte:字节数据类型是8位带符号的二进制补码整数。最小值为-128,最大值为127(含)”。
这里,前两行有效,但最后一行无效
byte b = -128;
byte b1 = 127;
byte b2 = b>>>b1;//illegal
Q1) 8 位有符号到底是什么意思?二进制格式的 128 为 1000 0000,而 -128 则需要一个额外的负号位,如果所有 8 位都被占用,那么它就适合了。
Q2) 对于 int,有一个无符号右移运算符,但是对于字节来说这似乎是非法的,为什么会这样。如果是字节,则无法防止溢出。在int 的情况下,它有效 https://stackoverflow.com/questions/19058859/what-does-mean-in-java
感谢您的帮助
顾名思义:有 8 位,包含 2^8 = 256 个可能的值。它是带符号的,因此范围是从 -128 到 127(256 个值)。最高有效位的值为-128。
在爪哇,二进制数字提升发生在以下操作中b >>> b1
。两种类型都提升为int
,结果是int
。但是,您可以将结果显式转换回byte
.
这是演员阵容:
byte b2 = (byte) (b >>> b1);
The JLS,第 5.6.2 节 http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.6.2,谈论二进制数字提升:
加宽原语转换(第 5.1.2 节)适用于转换或
两个操作数均由以下规则指定:
如果其中一个操作数的类型为 double,则另一个操作数将转换为 double。
否则,如果其中一个操作数的类型为 float,则另一个将被转换
浮。
否则,如果其中一个操作数为 long 类型,则另一个将被转换
很长。
否则,两个操作数都转换为 int 类型。
(强调我的)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)