a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C# > 正文

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

2020-01-24 03:44:23
字體:
來源:轉載
供稿:網友
賦值運算符也有和算數操作符所結合的用法之前附錄中有提及,用法是:比如要將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,會先執(zhí)行運算,再生成值。而對于后綴式a++,a--,會先生成值,在執(zhí)行運算。
復制代碼 代碼如下:

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
從上面這個例子中可以看書前綴式和后綴式的區(qū)別
遞增操作符正是c++這個名字的一種解釋,"超越c一步"
關系操作符
關系操作符主要生成的的是一個boolean布爾結果,他們比較值之間的結果如果為真返回true,如果為假則返回false,關系操作符包括<,>,<=,>=,==,!=(不等于),等于和不等于適合于所有基本數據類型,而其他的操作符不適合對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
但是如果引用的對象是自己創(chuàng)建的類,結果又會有不同
復制代碼 代碼如下:

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都是數字,那么執(zhí)行位與操作

|

op1 | op2

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

^

op1 ^ op2

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

短路
當使用邏輯操作符的時候會遇到一種短路狀況。既一但能夠明確無誤地確定整個表達式的值,就不再計算表達式余下的部分了。因此,整個邏輯表達式靠后的部分有可能不再計算。下面的例子展示了短路現象
復制代碼 代碼如下:

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,所以沒必要繼續(xù)計算剩余的表達式,那樣只是浪費。“短路“一次正來源于此。實際上,邏輯上所有的邏輯表達式都有一部分不必計算,那將獲得性能的提升。
三元操作符
三元操作符也成為條件操作符,他顯得比較特別,因為有三個操作數,但是他又確實屬于操作符的一種
其形式為
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中+和+=操作符除了之前講到的作用外,在特殊的上下文環(huán)境中是可以用作字符連接的。所以他們又稱為字符串操作符,字符串操作符有一些很有趣的行為。如果表達式以一個字符串起頭,那么后續(xù)所有的操作數都必須是字符串型(編譯器會自動將雙引號中的字符序列傳化成字符串):
復制代碼 代碼如下:

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上,并且用括號來控制了編譯器的轉換,使他們可以順利求和。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 成人精品在线播放 | 精品久久久久久国产三级 | 国产传媒毛片精品视频第一次 | 国产精品夜夜春夜夜爽久久电影 | 国产精品无码久久久久 | 亚洲中国精品精华液 | 久久久久久一区 | 久久精品国产一区 | 欧美国产日韩在线观看 | 亚洲天堂一区二区 | 欧美a区 | 蜜桃αv | 成年人网站在线免费观看 | 免费一区 | 每日更新av| 五月婷婷在线观看视频 | 免费超碰 | 亚洲乱码一区二区三区在线观看 | 精品亚洲永久免费精品 | 在线电影一区 | 丰满少妇久久久久久久 | 国产中文在线 | 一本一道久久a久久精品综合蜜臀 | 精品久久一区二区三区 | 日本精品视频在线播放 | 亚洲综合在线播放 | 99精品久久久久 | 成人免费视频在线看 | 国产情侣自拍啪啪 | 欧美精品一区二区三区在线四季 | 国产探花在线观看 | 欧美日韩精品一区二区三区 | 一区在线视频 | 欧美日韩精品在线观看 | 色综久久| 国产亚洲欧美一区二区 | 在线播放亚洲 | 日本不卡一二三区 | 久久久久久久av | 九九资源站 | 亚洲精品福利视频 |