引用oracle网站上的“字节:字节数据类型是8位带符号的二进制补码整数。最小值为-128,最大值为127(包括127)”。
在这里,前两行有效,但最后一行无效
byte b = -128;
byte b1 = 127;
byte b2 = b>>>b1;//illegal
Q1)8位带符号到底是什么意思?二进制格式的128将为1000 0000,而-128将需要一个额外的负号位,如果所有8位都被占用,则该位将适合。
Q2)对于int,有一个无符号的右移运算符,但是对于字节来说这似乎是非法的,为什么会这样。不能防止字节溢出。在int的情况下,它可以工作
谢谢你的帮助
听起来像是:有8位,保存2 ^ 8 = 256个可能的值。它是带符号的,因此范围是从frmo -128到127(256个值)。最高有效位的值为-128。
在Java中,二进制数值提升会通过进行操作b >>> b1
。两种类型都提升为int
,结果是int
。但是,您可以将结果显式转换回byte
。
这是演员表:
byte b2 = (byte) (b >>> b1);
在JLS,第5.6.2节,关于二进制数字促谈:
扩展原语转换(第5.1.2节)适用于转换以下规则指定的一个或两个操作数:
如果一个操作数的类型为double,则另一个将转换为double。
否则,如果其中一个操作数的类型为float,则另一个将转换为float。
否则,如果其中一个操作数的类型为long,则另一个将转换为long。
否则,两个操作数都将转换为int类型。
(强调我的)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句