121.Java_運算

運算

1.運算符分類

算術運算符 二元運算符 +,-,*,/,%
一元運算符 ++,--
賦值運算符   =
擴展運算符 +=,-=,*=,/=
關係運算符 >,<,>=,<=,==,!=  instanceof
邏輯運算符 &&,||,!,^
位運算符 &,|,^,~ , >>,<<,>>>
條件運算符 ? :
字符串鏈接符 +

 



 

 

2.簡介

2.1 算術運算符

2.1.1二元運算

1)算術運算符中+,-,*,/,%屬於二元運算符,java

二元運算符指的是須要兩個操做數才能完成運算的運算符。post

其中的%是取模運算符,就是求餘數操做加密

2)二元運算符的運算規則:
 整數運算:
  1. 若是兩個操做數有一個爲Long, 則結果也爲long。
  2. 沒有long時,結果爲int。即便操做數全爲short,byte,結果也是int。
 浮點運算:
  1. 若是兩個操做數有一個爲double,則結果爲double。
  2. 只有兩個操做數都是float,則結果才爲float。
 取模運算:
  1.其操做數能夠爲浮點數,通常使用整數,結果是「餘數」,spa

       2. 「餘數」符號和左邊操做數相同,如:7%3=1,-7%3=-1,7%-3=13d

2.1.2 一元運算

自增、自減運算符:++,-- code

單目運算符,能夠放在操做元以前,也能夠放在操做元以後。操做元必須是一個整型或浮點型變量。做用是使變量的值增1或減1,如: 對象

++x(--x)表示在使用x以前,先使x的值增(減)1。 blog

x++(x--)表示在使用x以後,使x的值增(減)1。字符串

1 int a = 3;
2 int b = a++;     //執行完後,b=3。先給b賦值,再自增。
3 System.out.println("a="+a+"\nb="+b);  // a=4 b=3
4 a = 3;
5 b = ++a;         //執行完後,c=5。a先自增,再給c賦值
6 System.out.println("a="+a+"\nb="+b);  //a=4  b=4 
int f=2;
int m=2; 
int x=(f*m++)+m; //x=7;
int y=(f*++m)+m; //y=9;

 

 

2.1.3算術混合運算的精度

java中數據類型的精度從「低」到「高」排列的順序是:get

byte short char int long float double

 

Java在計算算術表達式的值時,使用下列計算精度規則:

  • 若是表達式中有雙精度浮點數(double型數據),則按雙精度進行運算.
  • 若是表達式中最高精度是單精度浮點數(float型數據),則按單精度進行運算.
  • 若是表達式中最高精度是long型整數,則按long精度進行運算.
  • 若是表達式中最高精度低於int型整數,則按int精度進行運算.
  • char型數據和整型數據運算結果的精度是int。

例如:5/2的結果是2,要想獲得2.5,必須寫成5.0/2或5.0f/2。

例如:byte x=7; 則執行表達式 ‘B’+x; 的結果是int型。

 

 

 

 

2.2  賦值運算符

運算符 用法舉例 等效的表達式
+= a += b a = a+b
-= a -= b a = a-b
*= a *= b a = a*b
/= a /= b a = a/b
%= a %= b a = a%b
int a=3;
int b=4;
a+=b;//至關於a=a+b;
System.out.println("a="+a+"\nb="+b);  //a=7  b=4
a=3;
a*=b+3;//至關於a=a*(b+3)
System.out.println("a="+a+"\nb="+b);  //a=21 b=4

 

 

 

2.3 關係運算符

 關係運算符用來進行比較運算,關係運算的結果是布爾值:true/false

運算符 含義 示例
== 等於 a==b
!= 不等於 a!=b
> 大於 a>b
< 小於 a<b
>= 大於或等於 a>=b
<= 小於或等於 a<=b

注意事項
    =是賦值運算符,而真正的判斷兩個操做數是否相等的運算符是==。
    ==、!= 是全部(基本和引用)數據類型均可以使用

  • 在關係運算符中,當操做數是基本數據類型時,比較的是數據內容;
  • 在關係運算符中,當操做數是引用類型時,比較的是引用對象的引用值,判斷是不是同一對象,而沒有比較對象的內容。

  
    > 、>=、 <、 <= 僅針對數值類型(byte/short/int/long,float/double,char)

 

 

 

2.4 邏輯運算符

邏輯運算的操做數和運算結果都是boolean值

運算符 說明
邏輯與 &( 與) 兩個操做數爲true,結果纔是true,不然是false
邏輯或 |(或) 兩個操做數有一個是true,結果就是true
短路與 &&( 與) 只要有一個爲false,則直接返回false
短路或 ||(或) 只要有一個爲true, 則直接返回true
邏輯非 !(非) 取反:!false爲true,!true爲false
邏輯異或 ^(異或) 相同爲false,不一樣爲true  (異或加密)
短路與和短路或採用短路的方式。
從左到右計算,若是隻經過運算符左邊的操做數就可以肯定該邏輯表達式的值,
則不會繼續計算運算符右邊的操做數,提升效率。

boolean c = 1>2 && 2>(3/0);  System.out.println(c);
//1>2的結果爲false,那麼整個表達式的結果即爲false,將再也不計算2>(3/0)
boolean d = 1>2 & 2>(3/0);   System.out.println(d);
//1>2的結果爲false,那麼整個表達式的結果即爲false,
//還要計算2>(3/0),0不能作除數,
//會輸出異常信息
class Test
{   public static void main(String args[])
   {     int x,y=10;
         if( ((x=0)==0) || ((y=20)==20) ) 
        {  
              System.out.println("如今y的值是:"+y);
       }
   }
} 
run:
如今y的值是:10
成功構建 (總時間: 0 秒) 

 

//例子1中利用「異或」運算的性質,對幾個字符進行加密並輸出密文,而後再解密。
class Example3_1 
{  public static void main(String args[])
 { char a1='十',a2='點',a3='進',a4='攻';
     char secret='8';
     a1=(char)(a1^secret);   
     a2=(char)(a2^secret);
     a3=(char)(a3^secret);   
     a4=(char)(a4^secret);
     System.out.println("密文:"+a1+a2+a3+a4);
     a1=(char)(a1^secret);   
     a2=(char)(a2^secret);
     a3=(char)(a3^secret);  
     a4=(char)(a4^secret);
     System.out.println("原文:"+a1+a2+a3+a4);
    }
}
密文:卹炁迣攃
原文:十點進攻
Process finished with exit code 

 

 

 

 

 

 

2.5 位運算符

位運算指的是進行二進制位的運算

位運算符 說明
~ 取反
& 按位與
| 按位或
^ 按位異或
<< 左移運算符,左移1位至關於乘2
>> 右移運算符,右移1位至關於除2取商
int a = 3*2*2;
int b = 3<<2; //至關於:3*2*2;
int c = 12/2/2;
int d = 12>>2; //至關於12/2/2;

&和|既是邏輯運算符,也是位運算符。
若是兩側操做數都是boolean類型,就做爲邏輯運算符。
若是兩側的操做數是整數類型,就是位運算符

 

 

2.6 條件運算符

三目條件運算符格式

x ? y : z  //x 爲 boolean 類型表達式,
先計算 x 的值,
若爲true,則整個運算的結果爲表達式 y 的值,
不然整個運算結果爲表達式 z 的值
int score = 80; 
int x = -100;
String type =score<60?"不及格":"及格"; 
int flag = x > 0 ? 1 : (x == 0 ? 0 : -1);
System.out.println("type= " + type);  // type=及格
System.out.println("flag= "+ flag); //flag=-1

 

 

2.7 字符串鏈接符

「+」運算符兩側的操做數中只要有一個是字符串(String)類型,

系統會自動將另外一個操做數轉換爲字符串而後再進行鏈接。

 int a=12;
 System.out.println("a="+a);//輸出結果: a=12

 

2.8 instanceof 運算符

instanceof 運算符

是二目運算符,左面的操做元是一個對象;右面是一個類。當左面的對象是右面的類或子類建立的對象時,該運算符運算的結果是true ,不然是false。

例題:

class Test
{ public static void main (String argv[])
   {   String s=new String("abc");
       if(s instanceof  String)
           System.out.println("s is a string");
       B b=new B();
       if(b instanceof Object)
           System.out.println("b is definitedly an object");
    }
} 

 

 

 



 

3 運算符優先級

優先級 運算符 結合性
1 () 括號運算符 由左至右
2 !、+(正號)、-(負號) 一元運算符 由右至左
~ 位邏輯運算符
++、-- 遞增與遞減運算符
3 *、/、% 算術運算符 由左至右
4 +、-
5 <<、>> 位左移、右移運算符
6 >、>=、<、<= 關係運算符
7 ==、!=
8 & 位運算符、邏輯運算符
9 ^
10 |
11 && 邏輯運算符
12 ||
13
? : 條件運算符 由右至左
14 =、+=、-=、*=、/=、%= 賦值運算符、擴展運算符
a||b&&c  的運算結果是:a||(b&&c),而不是(a||b)&&c 
邏輯非>邏輯與>邏輯或
可用小括號提升優先級,加強可讀性

 

 

 

相關文章
相關標籤/搜索