Java中的带符号字节类型和按位运算符?

想要学习

引用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的情况下,它可以工作

谢谢你的帮助

格特曼
  1. 听起来像是:有8位,保存2 ^ 8 = 256个可能的值。它是带符号的,因此范围是从frmo -128到127(256个值)。最高有效位的值为-128。

  2. 在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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

带符号字节的按位与运算

来自分类Dev

Java中的按位和运算符

来自分类Dev

按位运算符的类型转换

来自分类Dev

重载类函数中的按位And(&)运算符和“ * this”

来自分类Dev

.NET Framework方法中的按位和运算符

来自分类Dev

C中的按位运算符和移位问题

来自分类Dev

按位运算符和for循环

来自分类Dev

Java中的按位右移运算符

来自分类Dev

Java中按位运算符的屏蔽选项

来自分类Dev

Java中的按位运算符仅适用于整数和长整数?

来自分类Dev

在Java中对0xFF使用按位和运算符的原因

来自分类Dev

Java中的按位运算符仅适用于整数和长整数?

来自分类Dev

Java | 按位运算符

来自分类Dev

hashCode中按位运算符>>>

来自分类Dev

Gremlin中的按位运算符

来自分类Dev

PHP中的按位运算符

来自分类Dev

按位XOR运算符和字节数组

来自分类Dev

字节上的Scala按位运算符

来自分类Dev

使用Lua中的32位按位运算比较带符号的64位数字

来自分类Dev

在Swift中使用C风格的无符号char数组和按位运算符

来自分类Dev

有符号整数上的按位运算符

来自分类Dev

有符号整数上的按位运算符

来自分类Dev

php 按位异或运算符 ^(插入符号)与整数

来自分类Dev

SQL查询中的大无符号整数(> 1024bit)的按位运算符

来自分类Dev

在Visual Studio 2015中的符号扩展操作数上使用按位或运算符

来自分类Dev

按位运算符和位操作

来自分类Dev

按位'&'运算符

来自分类Dev

按位或运算符

来自分类Dev

如何使用按位运算符和位操作在C中交换2个整数?