C# 操作符之二 算數操作符

來源:互聯網
上載者:User

賦值運算子也有和算數操作符所結合的用法之前附錄中有提及,用法是:比如要將x加上4,然後再賦值給x,就可以寫成x+=4.

複製代碼 代碼如下:public class MathOps{
public static void main(String [] args){
Random rand=new Random(47);
int i,j,k;
j=rand.nextInf(100)+1;
System.out.println("j:"+j);
k=rand.nextInt(100)+1;
System.out.println("k:"+k);
i=j-k;
System.out.println("j-k:"+i);
i=k/j;
System.out.println("k/j:"+i);
i=k*j;
System.out.println("k*j:"+i);
j%=k;
System.out.println("i%=k:"+j);
float u,v,w;
v=rand.nextFloat();
System.out.println("v:"+v);
w=rand.nextFloat();
System.out.println("w:"+w);
u=v+w;
System.out.printlln("v+w:"+u);
u=v-w;
System.out.println("v-w:"+u);
u=v*w;
System.out,print("v*w"+u);
u=v/w;
System.out.print("v/w:"+u);
u+=v;
System.out.print("u+=v:"+u);
u-=v;
System.out.print("u-=v:"+u);
u*=v;
System.out.print("u*=v:"+u);
u/=v;
System.out.print("u/=v:"+u);
}
}

輸出:
j:59;
k:56;
j+k:115;
j-k:3;
k/j:0;
k*j:3304;
k%j:56;
j%=k:3;
v:0.5309454;
w:0.0534122
v+w:0.5843576
v-w:0.47753322
v*w:0.028358962
v/w:9.94025
u+=v:10.471473
u-=v:9.940527
u*=v:5.2778773
u/=v:9.940527
通過Random類的對象,程式可以產生許多不同類型的隨機數字。做法很簡單,只需要調用方法nextInt()和nextFloat()即可(或nextLong()或者nextDouble())。傳遞給nextInt()的參數設定了所產生的隨機數的上限,而其下線為0,但是這個下線並不是我們想要的,因為他會產生除0的可能性,所以做了+1的操作。
一元操作符中編譯器會自動判斷+,-號的作用
比如:x=a*-b;編譯器可以編譯其含義b前-號是負號但為了避免讀者混淆最佳的寫法是
x=a*(-b)
一元減號用於轉變資料的符號,而一元加號只是為了與一元減號相對應,但是它唯一的作用僅僅是將較小類型的運算元提升為int;
算術操作符

Operator

Use

Description

+

op1 + op2

返回op1和op2的和

-

op1 - op2

返回op1和op2的差

*

op1 * op2

返回op1和op2的積

/

op1 / op2

返回op1除以op2的商

%

op1 % op2

返回op1除以 op2的餘數

自動遞增和遞減
Java中提供的打量快捷運算中遞增和遞減運算時兩種相當不錯又快捷的運算(通常被稱為"自動遞增"和"自動遞減"運算)。其中,遞減操作符是"--",意私事減少一個單位,遞增是"++"意思是增加一個單位
++a等價於a=a+1遞減亦同
遞增,遞減又分為"首碼式"和"尾碼式"。
對於首碼式:++a,--a,會先執行運算,再產生值。而對於尾碼式a++,a--,會先產生值,在執行運算。 複製代碼 代碼如下:public class AutoInc{
public static void main(String [] args){
int i=1;
System.out.println("i:"+1);
System.out.println("++i:"+ ++i);
System.out.println("i++:"+ i++);
System.out.println("—i:"+ --i);
System.out.println("i--:" + i--);
}
}

輸出
i:1
++i:2
i++:2
--i:1
i--:1
從上面這個例子中可以看書首碼式和尾碼式的區別
遞增操作符正是c++這個名字的一種解釋,"超越c一步"
關係操作符
關係操作符主要產生的的是一個boolean布爾結果,他們比較值之間的結果如果為真返回true,如果為假則返回false,關係操作符包括<,>,<=,>=,==,!=(不等於),等於和不等於適合於所有基礎資料型別 (Elementary Data Type),而其他的操作符不適合對boolean值的操作,因為true和false兩個之間不存在大於或小於的關係 複製代碼 代碼如下:public class Equivalence{
public static void main(String [] arg){
Integer n1=new Integer(47);
Integer n2=new Integer(47);
System.out.println(n1==n2);
System.out.println(n1!=n2);
}
}

輸出
false
true
結果可能會跟你想的不一樣,在這裡儘管對象內容相同,但是對象的引用是不同的,而==和!=比較的是對象的引用,而不是內容。
如果相比較兩對象的實際內容是否相同的話要怎麼做?需要使用所有對象都適用的equals()方法。但這個方法不適用於基本類型,基本類型直接使用==,!=即可 複製代碼 代碼如下:public class EqualMethod{
public static void main(String [] args){
Integer n1=new Integer(47);
Interger n2=new Integer(47);
System.out.println(n1.equals(n2));
}
}

輸出
true
但是如果引用的對象是自己建立的類,結果又會有不同 複製代碼 代碼如下:class Value{
int i;
}
public class EqualsMethod2{
public static void main(String [] args){
Value v1=new Value();
Value v2=new Value();
v1.i=v2.i=100;
System.out.println(v1.equals(v2));
}
}

輸出
false
結果又是false,這是由於equals的預設其實是比較引用。所以除非在自己的新類中重寫equals方法、否則是不能達到我們預期的效果的。
關係操作符

Operator

Use

Description

>

op1 > op2

當op1 大於op2 時返回true

>=

op1 >= op2

當op1 大於或等於op2 時返回true

<

op1 < op2

當op1 小於op2 時返回true

<=

op1 <= op2

當op1 小於或等於op2 時返回true

==

op1 == op2

當op1 等於大於op2 時返回true

!=

op1 != op2

當op1 不等於op2 時返回true

邏輯操作符
邏輯操作符與(&&),或(||),非(!)能根據參數的關係返回布爾值 複製代碼 代碼如下:public class Bool{
public static void main(String [] args){
Random rand=new Random(47);
int i=rand.nextInt(100);
int j=rand.nextInt(100);
System.out.println("i=" + i);
System.out.println("j=" + j);
System.out.println("i > j is" +( i>j));
System.out.println("i < j is" +( i<j));
System.out.println("i > =j is" +( i>=j));
System.out.println("i <=j is" +( i<=j));
System.out.println("i ==j is" +( i==j));
System.out.println("i !=j is" +( i!=j));
System.out.println("(i <10) && (j<10) is" +((i <10) && (j<10)));
System.out.println("(i <10) || (j<10) is" +((i <10) ||(j<10)));
}
}

輸出
i=58
j=55
i>j is true
i<j is false
i>= j is true
i<=j is false
i==j is false
i!=j is true
(i <10) && (j<10) is false
(i <10) ||(j<10) isfalse
與或非操作只能應用於布爾值,如果在應該是String值的地方使用了boolean的話,布爾值會自動轉換成適當的形式。
應注意的是在程式上對浮點數的比較是非常嚴格的。
條件操作符

Operator

Use

Description

&&

op1 && op2

當op1和op2都是true時,返回true ;如果op1的值是false,則不運算右邊的運算元

||

op1 || op2

當op1和op2有一個是true時,返回true;如果op1的值是true,則不運算右邊的運算元

!

! op

當op是false時,返回true;當op是true時,返回false

&

op1 & op2

運算op1和op2;如果op1和op2都是布爾值,而且都等於true,那麼返回true,否則返回false;如果op1和op2都是數字,那麼執行位與操作

|

op1 | op2

運算op1和op2;如果op1和op2都是布爾值,而且有一個等於true,那麼返回true,否則返回false;如果op1和op2都是數字,那麼執行位或操作

^

op1 ^ op2

運算op1和op2;如果op1和op2不同,即如果有一個是true,另一個不是,那麼返回true,否則返回false;如果op1和op2都是數字,那麼執行位異或操作

短路
當使用邏輯操作符的時候會遇到一種短路狀況。既一但能夠明確無誤地確定整個運算式的值,就不再計算運算式餘下的部分了。因此,整個邏輯運算式靠後的部分有可能不再計算。下面的例子展示了短路現象 複製代碼 代碼如下:public class ShortCircuit{
static Boolean test1(int val){
System.out.println(“test1(“+val+")");
System.out.println(“result:"+(val<1));
return val<1
}
static Boolean test2(int val){
System.out.println(“test1(“+val+")");
System.out.println(“result:"+(val<2));
return val<2
}
static Boolean test3(int val){
System.out.println(“test1(“+val+")");
System.out.println(“result:"+(val<3));
return val<3
}
public static void main(String [] args){
Boolean b=test1(0)&&test2(2)&&test3(2);
System.out.println(“expression is “ + b);
}
}

輸出
test1(0)
result:true
test(2)
result:false
expression is false
由於調用了3個方法你會很自然的覺得3個方法應該都被運行,但實際上輸出並非這樣,因為在第二次測試產生一個false結果。由於這意味著整個運算式肯定為false,所以沒必要繼續計算剩餘的運算式,那樣只是浪費。“短路“一次正來源於此。實際上,邏輯上所有的邏輯運算式都有一部分不必計算,那將獲得效能的提升。
三元操作符
三元操作符也成為條件操作符,他顯得比較特別,因為有三個運算元,但是他又確實屬於操作符的一種
其形式為
boolean-exp?value0 :value1
如果boolean-exp運算式結果為true,就計算value0,而且這個計算結果也就是操作符最終產生的值。如果boolean-exp運算式結果為false,就計算value1,同樣的,他的結果也將成為操作符最後的值。
當然它也可以被if-else代替,但是三元操作符與if-else是完全不同的,操作符會產生一個值。 複製代碼 代碼如下:public class TernaryIfElse{
static int ternary(int i){
return i<10?i*100:i*10;
}
static int standardIfElse(int i){
if(i<10)
return i*100;
else
return i*10;
}
public static void main(String [] args){
System.out.println(ternary(9));
System.out.println(ternary(10));
System.out.println standardIfElse( (9));
System.out.println standardIfElse( (10));
}
}

輸出
900
100
900
100
相比之下三元運算子要緊湊很多,而if-else更易理解
字串操作符+和+=
Java中+和+=操作符除了之前講到的作用外,在特殊的上下文環境中是可以用作字元串連的。所以他們又稱為字串操作符,字串操作符有一些很有趣的行為。如果運算式以一個字串起頭,那麼後續所有的運算元都必須是字串型(編譯器會自動將雙引號中的字元序列傳化成字串): 複製代碼 代碼如下:public class StringOperators{
public static void main(String [] args){
int x=0,y=1,z=2;
String s="x,y,z";
System.out.println(s+x+y+z);
System.out.println(x+""+s);
s+="(summed) =";
System.out.println(s+(x+y+z));
System.out.println(“"+x);
}
}

輸出
x,y,z 012
0 x,y,z
x,y,z (summed) = 3
0
應注意的是第一行輸出的是012而不是總和3,是因為編譯器將他們自動轉化成了字串形式,最後部分用+=講一個字串追加到了s上,並且用括弧來控制了編譯器的轉換,使他們可以順利求和。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.