我对这里的代码有疑问:
public class Main
{
public static void main(String[] args) {
System.out.println("Hello World\n");
int x = 36;
byte b1 = ((byte) x) & ((byte) 0xff); // it seems it is the part after &, but I have 0xff cast to byte by using (byte)0xff, so not sure where exactly the error is coming from.
System.out.println(b1);
}
}
我不确定究竟是哪个部分导致了以下错误:
不兼容的类型:从整数到字节的可能有损转换
这是程序输出的错误消息:
计算x
也就是说,你写的东西被有效地评估,就好像你把它写成下面一样,明确了语言隐含地给你什么:
byte b1 = ((int) (byte) x) & ((int) (byte) 0xff);
只需做算术运算,然后将结果转换为
byte
。
byte b1 = (byte)(x & 0xff);
链接到Java语言规范
感谢@rzwitserloot,用0xff屏蔽一个字节值是没有意义的。如果你需要从一个整数到一个字节的赋值,只需要写转换:
byte b1 = (byte)x;
你看起来很困惑。
你的代码没有任何意义。取任意数,计算<代码>
您还会收到一个错误,因为
你想达到什么目的?
不行。Java没有无符号字节。java字节是有符号的。句号。它可以保存-128到127之间的值。出于计算目的,-128和255是相同的(它们都是位序列
1111 1111
-在十六进制中,0xFF
,它们在所有相关算术下的行为相同,尽管将它们转换为另一种数字类型int
时确实很棘手)。
然后使用
int
。这是大多数
int x = y & 0xFF;
其中
y
是任何字节。
您可能在某个地方看到了这一点,现在正在尝试应用它,但将结果赋值为
y
int x = 36;
byte b1 = ((byte) x) & ((byte) 0xff);
任何可以想象的实际工作方式都意味着
b1
仍然是……36。
我试图为学校编写一些东西,但我不断收到这个编译错误: 错误:不兼容的类型:从int到byte的转换可能有损失 A = (字节)C / (字节)B;
internal.java:21:错误:不兼容类型:从int到byte a=(byte)c+b的转换可能有损;^1错误
这是我的代码。我想显示月份的名称而不是数字。但是我的代码中有一个错误。 它说“不兼容的类型:可能的有损转换从长到整数”。我的代码中的错误是:-
我有一个“从int到byte的可能有损转换”错误的问题,但我没有在代码中将整数转换为byte。 这是笔记本课 我不知道为什么我会得到这个错误。有人能帮助我吗?谢谢你。
我试图用java将十六进制数据写入我的串口,但是现在我不能将十六进制数据转换成字节数组。 以下是显示错误消息的代码: 这是写入串行端口的代码: 我能知道如何解决这个问题吗?目前我正在使用javax.comm插件。谢谢。