运算符(二)

来源:互联网 发布:ccdd数据库 编辑:程序博客网 时间:2024/05/29 03:38

运算符: D-逻辑运算符

         E-位运算符

         F-三目运算符(三元运算符)



Da(逻辑运算符):定义:可以连接某个值或某一个表达式


Db:基本逻辑运算符:&逻辑()与(并且的关系)

                           特点:有falsefalse

                      |逻辑()或(两个满足一个即可)

                           特点:有truetrue

                      !逻辑非

                           特点:非falsetrue

                      ^逻辑异或

                           特点:相同则false,不同则true  

                                 (同性相斥,异性相吸)



Dc:扩展逻辑运算符:&&逻辑双与

                      ||逻辑双或

         共同点:&&&具有同样的效果,有false则false

                       |||具有同样的效果,有truetrue

         不同:&&具有短路效果,左表达式为false则右边不执行

               ||也有短路效果,左表达式为true则右边不执行    


   




Ea(位运算符):基本位运算符:&位与

                   |位或

                   ^位异或

                   ~反码(按位取反)

计算一个数据对另一个数据进行位运算操作,必须算出该数据对应的二进制数据。

Eb:扩展位运算符:

         <<左移动 ----a<<b

                a>0时,a<<b=a*2^b

                a<0a<<b=最高位丢掉,在右边补齐0

         >>右移动 ----a>>b

                 a>0时,a>>b=a/2^b

                 a<0时  a>>b=(最高位是1,坐左补齐1,最高位是0,左补齐0)

          >>>无符号移动 ----a>>>b

                 a>0时,a>>>b=a/2^b

                 a<o时,a>>>b=(无论最高位是10,均左补齐0)



执行程序如下:


package 位运算符;
/* 符号左边的数为正数时
 * << 左移动  
 * >> 右移动  
 * >>>无符号移动
 *
 */
public class 扩展位运算符 {
 public static void main(String[] args){
  //当符号左边的数为正数时
  System.out.println(3<<2);//符号左边乘以2的移动次幂  3*2^2=3*4=12
  System.out.println(3>>2);//符号左边除以2的移动次幂  3/2^2=3/4=0(/是取整的)
  System.out.println(3>>>2);//符号左边除以2的移动次幂  3/2^2=3/4=0(/是取整的)
  System.out.println(4>>>2);//符号左边除以2的移动次幂  4/2^2=4/4=1(/是取整的)
  System.out.println(12>>>2);//符号左边除以2的移动次幂  12/2^2=12/4=3(/是取整的)
  
  System.out.println("--------分割线---------");
  
  //当符号左边的数为负数时
  /*
   * << 左移动,首位丢掉,右补齐0
         * >> 右移动,最高位是1,左补齐1;最高位是0,左补齐0;
         * >>>无符号移动,无论最高位是1或0,均左补齐0
   *
   *
   */
  System.out.println(-3<<2);
  System.out.println(-3>>2);
  System.out.println(-3>>>2);
  /*
   * -3<<2
   * -3的二进制: 10000000 00000000 00000000 00000011:原码
   *           11111111 11111111 11111111 11111100:反码
   *   反码+1=补码
   *           11111111 11111111 11111111 11111101:补码
   *   补码左移两位
   *       (11)11111111 11111111 11111111 111101(00) 
   *   左移后的补码再-1
   *           11111111 11111111 11111111 11110011 :反码
   *           10000000 00000000 00000000 00001100 :原码
   *    结果为:    -12
   *
   * -3>>2
   * -3的二进制: 10000000 00000000 00000000 00000011:原码
   *           11111111 11111111 11111111 11111100:反码
   *   反码+1=补码
   *           11111111 11111111 11111111 11111101:补码
   *   补码右移两位
   *           1111111111  11111111 11111111 111111(01)
   *   右移后的补码再-1
   *           1111111111  11111111 11111111 111110 :反码
   *           1000000000  00000000 00000000 000001 :原码
   *    结果为:-1
   *        
   *  -3>>>2      
   *  -3的二进制: 10000000 00000000 00000000 00000011:原码
   *            11111111 11111111 11111111 11111100:反码
   *   反码+1=补码
   *           11111111 11111111 11111111 11111101:补码
   *    左补齐0:
   *           0011111111  11111111  11111111  111111(01)
   *     结果是:1073741823
   *          
   *
   *
   */
  
 }
}

Fa(三目运算符):基本运算符:单目运算符,双目运算符。

Fb:三目运算符又叫三元运算符;

           格式: (表达式)? 表达式1的结果:表达式2的结果

           输出:最终结果是boolean类型。

           执行流程:1)先判断表达式是否成立

                     2)成立则为true,将表达式1的结果作为结果输出。

                     3)不成立则为false,将表达式2的结果输出。

Fc:练习题:




package 三目运算符;
/*
 * 练习:1)求两个数据最大值
 *      2)求三个数据最大值
 *      3)求两个数据是否相等
 */
public class 练习题 {
 public static void main(String[] args){
  //定义两个变量,求最大值
  int a = 98;
  int b = 99;
  //定义max变量
  int max1 = (a>b) ? a:b;
  System.out.println("最大值是:"+max1);
  System.out.println("--------下一题-------");
  
  //定义三个变量,求最大值
  int x = 34;
  int y = 100;
  int z = 99;
  //定义max变量
  int max2 = (x>y) ? x:y;
  //定义中间变量,用来存放max2的结果
  int Max = (z>max2) ? z:max2;
  System.out.println("三个数据的最大值是:"+Max);
  System.out.println("--------下一题-----");
  
  //定义两个变量
  int m = 44;
  int n = 34;
  //判断是否相等需要定义boolean类型
  boolean flag = (m==n) ? true:false;
  System.out.println("判断结果:"+flag);
  
  
  
 }
}







原创粉丝点击