按位运算符被认为是对变量进行遍历,并对它们进行逐位操作。对于整型、长整型、字符型,这是有意义的。这些变量可以包含由其大小强制执行的所有值范围。
然而,在布尔值的情况下,布尔值只能包含两个值。1=真或0=假。但是布尔值的大小没有定义。它可以像一个字节一样大,也可以像一个比特一样小。
那么在布尔值上使用按位运算符会有什么效果呢?JVM实际上是否将其转换为正常的逻辑运算符并继续进行操作?出于操作的目的,它是否将布尔值视为单个位实体?或者结果未定义以及布尔值的大小?
发布于 2009-11-13 02:11:34
当操作数是基本整数类型时,运算符&
、^
和|
是按位运算符。当操作数是布尔值时,它们是逻辑运算符,在后一种情况下,它们的行为是指定的。有关详细信息,请参阅Java Language Specification的15.22.2节。
发布于 2009-11-13 02:10:11
即使它能行得通,你也不应该这么做。语言规范仅在两个操作数都是原始整数类型或都是布尔类型时才定义按位运算符。我要说的是,对于任何其他情况,结果都是没有定义的:
http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#5228
https://stackoverflow.com/questions/1724205
复制相似问题