如果我编译这个:
1 public class test {
2 public static void main (String args[]) {
3 byte bx = 1;
4 byte by = 2;
5
6 int iz = bx ^ by;
7 byte bz = bx ^ by;
8 byte cbz = (byte)(bx ^ by);
9 }
10 }
然后我得到这个错误:
test.java:7: error: incompatible types: possible lossy conversion from int to byte
bz = bx ^ by;
这让我经历了一段短暂的旅程,我决定^总是在按位上下文中生成int。我不明白为什么会做出这样的选择。
起初我认为这可能与装箱(或拆箱)有关,但我使用的是一个基元类型,因此我不认为这是我困惑的一部分。
我能想到的唯一一件事是字节被提升为int,但我还没有找到任何证据表明发生了这种情况。
因为在Java中,所有数字运算符都将操作数提升为JLS 5.6.2定义的int、long、float或double。二进制数字升级:
当运算符对一对操作数应用二进制数字提升时,每个操作数都必须表示可转换为数字类型的值,以下规则依次适用:
>
加宽基元转换(§5.1.2)用于转换以下规则指定的一个或两个操作数:
>
否则,如果任一操作数的类型为浮点,则另一个操作数将转换为浮点。
否则,如果任一操作数的类型为long
,则将另一个操作数转换为long
。
否则,两个操作数都转换为类型int
。
类型转换(如果有)后,值集转换(§5.1.13)将应用于每个操作数。
对某些运算符的操作数执行二进制数字提升:
>
数值类型和
-
的加减运算符(§15.18.2)
数值比较运算符
数值相等运算符
==
和=
(§15.21.1)
整数位运算符<代码>
在某些情况下,条件运算符:
(§15.25)
我的目标是了解两者的互补性。 有符号整数中的等于。但是,如果您使用十六进制的或十进制的按位与它,它将等于。 在我看来,这不应该发生,因为顶部字节与结果字节相同 我的预期结果是该值不应该改变,它等于< code>-121。 我的实际结果是值发生变化。 我的猜测是,是一个。因此,顶部字节的有符号位和下部字节的无符号位将导致无符号位。但是......那不可能是对的。
请看下面的代码。我使用Apache Derby作为嵌入式数据库 此代码出现以下错误 在这里,我试图做的是,获取全名,它作为FirstName、MiddleName和LastName存储在数据库中。 示例:名字-彼得,中间名-梅塔,姓氏-约翰逊 然后我试着得到“彼得·梅塔·约翰逊”。这就是为什么我使用运算符将值合并到3列中。 为什么我得到这个错误?这在MSSQL Server中有效,但在Derby中
问题内容: 我是一个仅出于乐趣而编写代码的人,并且在学术或专业环境中都没有真正地去研究它,所以像这些按位运算符之类的东西真的让我感到困惑。 我正在阅读一篇有关JavaScript的文章,该文章显然支持按位操作。我一直看到该操作在某些地方提到过,并且我尝试阅读以弄清楚它到底是什么,但是我似乎一点也不了解。那是什么 清楚的例子会很棒!:D 再问几个问题-按位运算的一些实际应用是什么?您什么时候可以使用
问题内容: 我正在研究《 Beginning Android Games》 这本书。我注意到的一件事是: 这是我第一次看到这样的变量,所以我不知道它的作用。我在Java中运行代码并创建了一些示例。 如果我运行此代码: 答案将是0?这是为什么? 如果我运行此代码: 起初,我认为这是价值的串联,因此我假设i = 10500,但事实并非如此。答案是一样的。还是0?有人知道这里发生了什么吗? 问题答案:
错误显示这一行 我已经修复了代码: 是括号的一个问题,以后可以更新。
二进制运算符“*”的操作数类型不正确 我在编译过程中得到的错误是二进制运算符的操作数类型错误,它说:第一个类型:int,第二个类型:int[],我只能使用这个逻辑。以下是我的程序的一部分