黑马程序员技术交流社区

标题: 移位运算符 [打印本页]

作者: 明日天涯    时间: 2015-4-20 08:43
标题: 移位运算符
/*
移位运算符: 直接操作数据的二进制位
        << 左移
规律:一个操作数进行左移运算 的时候,实际上就是等于该操作数乘以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);
        }
}








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2