Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:运算符和类型转换_Java_Operators_Bit Manipulation_Bitwise Operators_Typecast Operator - Fatal编程技术网

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
}