Java中关于操作符的面试题
1、分析下面程序运行输出的结果
public static void main(String[] args) { int i = 12; int j = i+=i-=i*=i; System.out.println(j); }
分析:
int j = i += (i -= (i *= i)) i += (i -= (i = i * i)) i += (i = i-i^2) i = (i + i - i^2) i = 12 +12 - 144 i = -120
注意:
-
式子中每一步运算赋值操作(+=、-=、*=)完毕之后会把结果进行赋值,但是是赋值给局部变量表中的变量i。
-
继续向左进行运算时,使用的i的值,还是最初读取到的初始值12,这个数已经被读取到了操作数栈中,所以不会随着运算赋值符操作而改变。
考察位运算:&、|、^、-、>>、>>>、<<
2、传入一个int数,要求清除该数的低8位,高24位不变,将结果以十进制形式输出。
实际要求:将一个数的低8位无条件置0
例如: 输入:01010000 00101111 10101011 01010101 输出:01010000 00101111 10101011 00000000 解析:从&、|等位运算的