我有以下Java代码:
byte value = 0xfe; // corresponds to -2 (signed) and 254 (unsigned)
int result = value & 0xff;
打印时结果为254,但我不知道此代码如何工作。如果&运算符只是按位运算符,那么为什么不生成字节而是取整数?
它设置result
为将8位value
放入的最低8位得到的(无符号)值result
。
诸如此类的必要原因是byte
Java中的一种签名类型。如果你刚刚写过:
int result = value;
那么result最终将得到值ff ff ff fe而不是00 00 00 fe。另一个微妙之处在于,将&定义为仅对int值1进行操作,因此会发生以下情况:
value
被提升为int(ff ff ff fe)
。0xf
f是int
文字(00 00 00 ff)
。&
被施加到得到所希望的值result
。int
发生之前的&
施加操作者)。1 好吧,不完全是。该&
运营商工作的long价值以及,如果操作数是一个long
。但是没有byte
。请参阅Java语言规范的15.22.1和5.6.2节。
问题内容: 为什么Java编译器不会让我把成,是8位长,而这正大小的数据类型。 有人可以解释为什么1有效,为什么2不有效吗? 编辑 我读了答案,声称0xff是255,怎么办?不是吗,是什么导致0xff,-128或255或其他原因。为什么不将其视为字节,而不是将该字节的8位视为1。 问题答案: 在Java 类型是一个8位有符号整数类型与在范围内的值来。文字表示哪个超出了该范围。 在第一个示例中,您试
(1)用来修饰一个引用 如果引用为基本数据类型,则该引用为常量,该值无法修改; 如果引用为引用数据类型,比如对象、数组,则该对象、数组本身可以修改,但指向该对象或数组的地址的引用不能修改。 如果引用时类的成员变量,则必须当场赋值,否则编译会报错。 (2)用来修饰一个方法 当使用final修饰方法时,这个方法将成为最终方法,无法被子类重写。但是,该方法仍然可以被继承。 (3)用来修饰类 当用f
本文向大家介绍final 在 Java 中有什么作用?相关面试题,主要包含被问及final 在 Java 中有什么作用?时的应答技巧和注意事项,需要的朋友参考一下 final 修饰的类叫最终类,该类不能被继承。 final 修饰的方法不能被重写。 final 修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。
问题内容: 我正在尝试在以下代码片段中了解0xFF的作用: 有任何想法吗? 问题答案: 是二进制的十六进制常量。通过对该常量使用按位AND(),它仅保留原始的最后8位(在这种情况下,无论如何)。
问题内容: 可以解释一下AtomicLong的用途吗?例如,以下语句有什么区别? 问题答案: 这两个对象之间存在 显着 差异,尽管最终结果是相同的,但它们绝对是非常不同的,并且在非常不同的情况下使用。 在以下情况下使用基本对象: 您需要包装器类 您正在使用收藏夹 您只想处理对象,而不要处理基元(可以解决问题) 您使用以下情况: 您必须保证该值可以在并发环境中使用 您不需要包装器类(因为此类不会自动
问题内容: 这行是问题所在: 每个部分在此结构中起什么作用???? 谢谢,我很抱歉询问Beacuse,因为我是Java新手。 问题答案: 大概大多数代码都是清晰的,这里唯一让您感到困惑的是此表达式: 第一部分: 加宽在位置字节到的比特位置8-31用零值。在Java中,数据类型是带符号的整数值,因此加宽的符号会扩展该值。如果没有,则大于0x7f的值最终将变为负值。剩下的就很明显了:它添加了0x100