/*
移位运算符: 直接操作数据的二进制位
<< 左移
规律:一个操作数进行左移运算 的时候,实际上就是等于该操作数乘以2的n次方,n就是移动的位数。
面试题目: 使用最高效率的方式算出2乘以8的结果。
2<<3 = 2*2(3) = 16
2*8 = 16
>> 右移
规律: 一个操作数进行右移运算 的时候,实际上就是等于该操作数除以2的n次方,n就是移动的位数。
>>> 无符号右移
无符号右移的特殊之处: 一个操作数进行无符号右移的时候,不管该操作数是正数还是负数,左边空缺位都是使用0来补。
*/
class Demo12
{
public static void main(String[] args)
{
/*
System.out.println(6<<1); // 12 6*2(1) = 12
System.out.println(6<<2); // 24 6*2(2) = 24
System.out.println(6<<3); // 48 6*2(3) = 48
*/
System.out.println(6>>1) ; // 3 6/2(1) = 3
System.out.println(6>>2) ; // 1 6/2(2) = 1
System.out.println(6>>3) ; // 0 6/2(3) = 0
}
}
/*
面试题目1:定义了两个变量a ,b ,然后交换a和b的值,不准出现第三方变量。
面试题目2:取出下面二进制数据的低4四位数据。
00000000-00010000-00110000-11000111
& 00000000-00000000-00000000-00001111
-----------------------------------------
0111
*/
class Demo11
{
public static void main(String[] args)
{
int a = 3;
int b = 5;
/*
int temp = a; // temp = 3
a = b; //a = 5
b = temp; //b = 3
方式一: 相加法。 缺陷:两个int值相加有可能会超出int的表示范围。
a = a+b; // a = 8
b = a - b; // b = 8-5 = 3
a = a - b; // a = 8 - 3 = 5
方式二: 使用异或. 缺点: 逻辑不清晰。
*/
a = a^b; // a = 3^5
b = a^b; // b = 3^5^5 = 3
a = a^b; // a = 3^5^3 = 5
System.out.println("a = "+ a+" , b="+b);
}
}
|
|