03--java中的运算符

来源:互联网 发布:到期域名查询 编辑:程序博客网 时间:2024/06/06 01:13

Java语言中定义了若干运算符号,来完成某种特殊的运算,

    按照参与运算的数据的数量分为三种类型

         一元/单目运算符

        二元/双目运算符

        三元/()目运算符

    按照运算符的功能分为六种

        算术运算符     关系运算符        逻辑运算符

        位运算符         移位运算符        条件运算符

 


    算术运算符:+ - * / %

        当整数运算超出了此类型临界值,如果超过了最值,该数值将反响跳转到表示范围的另一端。例如下面的例子。

        System.out.println((byte)(100 + 45));  //打印结果是-111,因为运算结果145超过byte的数据的范围(-128~127),反向到负数端

   整数的除法是整除,按正常运算小数部分全部舍弃。在做除法运算的时候容易出现下溢出(小数位丢掉了)。例如:

        System.out.println(12/5); // 结果是2,下溢出,小数部分被舍弃

  不同类型的数在做运算时,会发生类型转换,byteshortchar,三种类型的数做运算实际上都是按照int在做运算,运算的结果默认是int型。也就是说int类型及以下的类型的数都按照int计算。例如:

byte b = 3;short c = 5;b = c + 3; // 不能通过编译,计算的结果是int类型,在赋给byte类型的b会丢失精度b = (byte)(c+3);//能通过编译,将byte类型的结果强制转换为int类型。

        +号除了进行加法运算外,还可以进行字符串拼接,任何数据域字符串进行+运算,解雇全部转换为字符串进行连接。例如:

System.out.println("5" + "5");//结果是55,此时的+号作为字符串拼接的符号

      %表示模运算,结果是取余操作,负数对一个数取模结果还是负数,结果的正负与模数无关,与被模数的正负相同。例如:

System.out.println(-5%3);//-2System.out.println(-5%-3);//-2System.out.println(5%-3);//2System.out.println(5%3);//2

        自增(自减)运算符:++  --,就是可以将当前变量自我增加(减少)1的运算符。

              i++,后++,先将i的值作为整个表达式的值,然后i增加1.

              ++i,先++,先将i的增加1,然后将i的值作为整个表达式的值。--是一样的原理。例如:

int x = 2,y = 2;System.out.println(x++);//打印2System.out.println(++y);//打印3System.out.println(x);//打印3System.out.println(y);//打印3



    关系运算符:>  <  ==  >=  <=  !=,用于比较两个值之间的关系,运算结果为布尔类型的值,true或者false。例如:

System.out.println(3>5);//falseSystem.out.println(3<5);//trueSystem.out.println(3==5);//false;System.out.println(3>=5);//falseSystem.out.println(3<=5);//trueSystem.out.println(3!=5);//true




    逻辑运算符:&()  |(或) ^(异或) !(非)  &&(短路与)  ||(短路或)。逻辑运算结果为布尔值true或者false。逻辑运算真值表:

&(&&)

true

false

true

true

false

fasle

false

false

| ( || )

true

false

true

true

true

fasle

true

false


^

true

false

true

false

true

fasle

true

false


!

true

false

 

false

true


         &&||被称作短路运算,即在做运算的两个表达式中,第一个表达式的结果能决定整个表达式的结果时,第二个表达式则不会再做判断,可以理解为被短路了。一般来说用的比较多。例如:

int x=3,y=4;if(x<y||y++>3){  //||因为x<y为true,y++>3并为做判断。System.out.println(y);//打印4,说明y并没有做++的运算。}

    


     

        位运算符:~  &  |  ^.位运算是针对数字的二进制表示格式进行运算的一种特殊运算。操作数均为整数。

                   ~按位取反对操作数的每一个二进制位进行“取反”操作。格式:~操作数

                          42     00101010

                                 ~

                          -43    11010101


              &按位与将操作数的对应位逐位进行位逻辑运算运算。用途:将操作数的指定二进制位置0.格式: 操作数&操作数

                      42 & 15         

                                 00101010

                             & 00001111

                                00001010

                |按位或将操作数的对应位逐位进行位逻辑或算运算。用途:将操作数的指定二进制位置1.格式: 操作数&操作数

                         42 & 15         

                                00101010

                              | 00001111

                                 00101111

                ^按位异或将操作数的对应位逐位进行位异或运算,用途:将操作数的指定二进制位取反。格式:操作时^操作数

                         42 ^ 15         

                            00101010

                         ^ 00001111

                            00100101




    移位运算符:>>右移  <<左移  >>>无符号右移。对操作数的二进制表示形式进行左右位的移动。

             右移>>,格式:操作数1>>操作数2,将操作数1的二进制位向右移操作数2(正整数)位,原数为正数高位补0,原数为负数高位补1.

            
                  int  a = 42;                  int b = a >> 2;                 System.out.println(“b=” + b);


                  42      00101010

                         >>2

                  10     00001010 

        左移<<,格式:操作数1<<操作数2,将操作数1的二进制位向右移操作数2(正整数)位,低位位补0

int  a = 42;int b = a << 2;System.out.println(“b=” + b);

                42      00101010

                    <<2

             168     10101000

        无符号右移>>>,格式:操作数1>>>操作数2,将操作数1的二进制位向右移操作数2(正整数)位,高位位补0

int  a = 42;int b = a >>>2;System.out.println(“b=” + b);

 


      条件运算符。? : .条件运算符是目前唯一的三目运算符.格式:条件表达式?表达式1:表达式2        3>2?4:5     true/false?1:值2

                 当条件为真时,该运算符的结果是表达式1

                 当条件为假时,该运算符的结果是表达式2

                    int x=3,y=5;                   System.out.println(x>y?x:y);//x>y为false,打印y的值。
  

    总结:二进制那些有些蒙,理解有关运算用二进制来分析几次转换规律老是记不住。下来多分析分析。