Java:运算符和类型转换
上述表达式的计算是如何进行的?是吗Java:运算符和类型转换,java,operators,bit-manipulation,bitwise-operators,typecast-operator,Java,Operators,Bit Manipulation,Bitwise Operators,Typecast Operator,上述表达式的计算是如何进行的?是吗 long value = 0x88888888 ; int i = (int) (value & 0xff); 还是先计算按位and运算?我感到困惑:-|首先,按位操作被计算为long操作(括号保证了它)。然后将结果强制转换为int。首先,按位运算作为long运算进行计算(括号保证)。然后将结果转换为int.首先(值&0xff)将被解决。i、 e值(按位和)0xff. 然后使用类型转换inti=(int)(value&0xff)将结果转换为int值第
long value = 0x88888888 ;
int i = (int) (value & 0xff);
还是先计算按位and运算?我感到困惑:-|首先,按位操作被计算为long操作(括号保证了它)。然后将结果强制转换为int。首先,按位运算作为long运算进行计算(括号保证)。然后将结果转换为int.首先
(值&0xff)代码>将被解决。i、 e值(按位和)0xff.
然后使用类型转换inti=(int)(value&0xff)将结果转换为int值代码>第一个(值&0xff)代码>将被解决。i、 e值(按位和)0xff.
然后使用类型转换inti=(int)(value&0xff)将结果转换为int值代码>让我们看看:
如您所见,十六进制0xff
首先转换为long,然后使用按位and
转换为值,方法是在转换为int
后用0xff
掩蔽它
lload_1
从局部变量1加载长值
ldc2_w
将常量池(双倍或长)中的常量索引推送到堆栈上
land
按位和两个长
l2i
将长字符转换为整数
让我们看看:
如您所见,十六进制0xff
首先转换为long,然后使用按位and
转换为值,方法是在转换为int
后用0xff
掩蔽它
lload_1
从局部变量1加载长值
ldc2_w
将常量池(双倍或长)中的常量索引推送到堆栈上
land
按位和两个长
l2i
将长字符转换为整数
谢谢!他开始糊涂了!非常感谢。他开始糊涂了!()
中的任何内容都将在应用外部内容之前进行评估。标准规则是扩展较短的操作数以匹配较长的操作数。但这有关系吗?无论哪种方式,我都能理解。但我有点困惑。谢谢是的,值是否为@sk89并不重要,我认为它与按位运算符(&
,|
,^
,~
)没有任何区别,因为高阶位的内容不会影响低阶位的情况,反之亦然
在应用任何外部内容之前进行评估。标准规则是扩展较短的操作数以匹配较长的操作数。但这有关系吗?无论哪种方式,我都能理解。但我有点困惑。谢谢是的,值是否为@sk89并不重要,我认为它与按位运算符(&
,|
,^
,~
)没有任何区别,因为高阶位的内容不会影响低阶位的情况,反之亦然。
int i = (int)value & (int)0xff ;
public static void main(java.lang.String[]);
Code:
0: ldc2_w #35 // long -2004318072l
3: lstore_1
4: lload_1
5: ldc2_w #37 // long 255l
8: land
9: l2i
10: istore_3
11: return
}