A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© heima910442999 中级黑马   /  2016-1-14 18:09  /  1164 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

[code]

逻辑运算符的基本用法:        &,|,^,!
        1:逻辑与&并且and        遇false则false
        2:逻辑或|        or                遇true则true       
        3:逻辑^或(亦或)                两边相同为false,不同则true
        4:逻辑非!                        非false则true,非true则false


03.02-逻辑运算符&&和&的区别:

&&和&的区别
                1 最终结果一样
                2 &&具有短路效果.左边是false,右边不执行.
||和|的区别?
                1 最终的记过一样
                2 ||具有短路效果.左边true右面不执行
开发中常用谁?
&&,||,!


03.03-位运算符的基本用法01
        位&:有0则0                //位运算符直接操作 的是二进制的值                0代表false        代表true
        位|:有1则1                //遇true则true
        位^:相同则0,不同则1
        位~:按位取反                        //""取反的规律是如果数值是a 那么结果就是-(a+1)""   
        ~A=(A+1)乘以 -1
       
        System.out,println(6 & 3);                = 2
        /*6的二进制是 110
              &
          3的二进制是 011
   --------------------     =  2
        有0则0            010   
        */

    位|:有1则1
        System.out,println(6 | 3);                = 7

        /*6的二进制是 110
              |
          3的二进制是 011
  --------------------     =  7
        有1则1            111   
        */
         
        位^:相同则0,不同则1
        System.out,println(6 ^ 3);                = 5
        /*6的二进制是 110
              ^
          3的二进制是 011
  --------------------     =  5
        有1则1            101   
        */

        位~:按位取反
        System.out,println(~6);                = - 7                        //6是int类型 先转换
        /* 00000000 00000000 00000000 00000110    6的原码 反码 补码 都是本身
           11111111 11111111 11111111 11111001          对6取反
- 1   00000000 00000000 00000000 00000001   
------------------------------------------
           11111111 11111111 11111111 11111000    反码
           10000000 00000000 00000000 00000111    原码(-7)  "最高位是1 所以是负数"
           */



03.04-位异或运算符的特点及面试题
                /*
                *位异或运算符的特点

                * ^的特点: 一个数据对另一个数据位异或两次,该数本身不变.
                */
                System.out.println(5 ^ 10 ^ 10);   结果是 5
                System.out.println(5 ^ 10 ^ 5);    结果是 10

        * 请自己实现两个整数变量的交换
        * 注意:以后讲课的过程中,我没有明确指定数据的类型,默认int类型。
   int x = 10
   int y = 5

   //需要第三方变量,开发推荐用这个
   /*int temp;                temp临时存储
   temp = x;
   x = y
   y = temp */
   
   //不需要定义第三方变量,有弊端,有可能会超出int的取值范围
   x = x + y                //10 + 5 = 15
   y = x - y                //15 - 5 = 10
   x = x - y                //15 - 10 = 5
                System.out.println("x = " + x ",y = " + y);  

                //不需要第三方变量,通过^来做
                x = x ^ y                // 10^5                                                  
                y=x^y                        //10^5^5         y=10
                x=x^y                        //10^5^10         x=5

03.05-位运算符的基本用法2及面试题
        /*
        *<<:左移  左边最高位丢弃,右面补齐0
        *>>:右移  最高位是0,左边补齐0;最高位是1,左边补齐1
        *>>>:无符号右移 无论最高位是0 还是1,左边补齐0
        *最有效的算出2*8的结果
        */

        规律:

        //左移,向左移动几位就是乘以2的几次幂
        System.out.ptintln(12 << 1)                //24
        System.out.println(12 << 2)                //48

        /*
         00000000 00000000 00000000 00000000 00001100                12补码
  (0)00000000 00000000 00000000 00000000 00001100                24的补码
(00)00000000 00000000 00000000 00000000 00001100                48的补码
        */

        //右移,向右移动几位就是除以2的几次幂
        //         
        /*00000000 00000000 00000000 00000000 00001100                        12补码
          00000000 00000000 00000000 00000000 00001100(0)                6补码
          00000000 00000000 00000000 00000000 00001100(00)                3补码
        */
        //最有效率的算出2*8的结果   
        System.out.println(2<<3);        8是2的三次幂   // 8=2*2*2   三个2  所以移三位
        直接是2的二进制想右移3位 得出结果                (直接运算比较快速)
        否则 则是先把 2的二进制 在 把 8的二进制 换算出来  在相乘        (计算麻烦)

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马