在程式中,運算子就是編譯器用來執行命令和運算的符號,例如「=」用來賦值,「==」用來比較等。運算子有三類:一是數**算符,用於數**算,就跟數學課上學到的一樣;二是賦值運算子,用來改變變數的值;三是比較運算子,比較兩個變數是否相等,誰大誰小。
數**算符的用法就跟一般數學式子裡的一樣。用「+」可以把兩個變數相加,例如:
但若是把兩組字串相加就有所不同了,結果是兩組字串接在一起:
string first = "john";
string second = "brown";
string full = first+second; // full等於johnbrown
這樣的結果是由所謂「運算子過載」造成的。這個話題有點高階,這本書裡不作介紹,有興趣的讀者可以參考第17章列出的程式設計書目或是上網查閱。
其他簡單的數**算符有「-」(減)、「*」(乘)和「/」(除),還有「%」(取模)。
取模就是左邊的數除以右邊的數所得的餘數。下面是一些例子:
8 % 2 // 結果等於0,8被2除無餘數
17 % 2 // 結果等於1,17除以2的餘數是1
19 % 5 // 結果等於4,19除以5的餘數是4
12 % 11 // 結果等於1,12除以11的餘數是1
19.0 % 5 // 結果等於4.0,因為是對浮點變數做取模運算
賦值運算子從右側開始起作用,也就是說,運算子把右側變數的值賦給左側變數,例如:
int age = 6;
「=」把左邊變數的值設為6。跟「=」類似,以下運算子也用來設定左側變數的值。
+=
把右側的值加到左側變數的原值上再賦給左側變數:
int height = 6;
height += 1; // height等於7
height += 10; // height等於17
-=
把右側的值從左側變數的原值減掉再賦給左側變數:
int size = 16;
size -= 8; // size等於8
size -= 6; // size等於2
++和--
把左側變數的值加1或減1:
int hearts = 2;
hearts++; // hearts值為3
hearts--; // hearts變為2
hearts--; // hearts變為1
*= 或 /=
道理跟「+=」和「-=」一樣,用右側的值乘或者除左側變數的原值再賦給左側:
int i = 15;
i /= 3; // i等於5
int j = 20;
j /= 2; // j等於10
float k = 100.0;
k /= 3.333333; // k等於30.000004
float m = 100.0;
m /= '2'; // 不建議這樣做
i *= 4; // i等於20
m *= 0.5; // m原值為2.0,現在等於1.0
值的比較對程式設計來講十分重要,尤其是在一些控制語句裡。2.4節會講控制語句,現在先來熟悉一下各種比較運算子。我們接下來會經常遇到它們。在不同的程式語言裡,比較運算子略有不同。比較運算就是判斷變數的值是否相等,誰大誰小。
==(相等)
比較兩者是否相等,例如:
5 == 4; // false
'a' == 'a' // true
(12 / 3) == (2 * 2); // true
4.1 == 4 // false
char(102) == int('f') // true, 因為ascii裡 'f' 對應值102
"duck" == 0.002 // false, 該操作無效
!=(不相等)
判斷兩者是否不相等,例如:
3 != 1 //true, 它們的確不相等
'b' != 'b' // 也是true, 它們不相等
>(大於)
判斷左側的值是否大於右側的值,跟數學課上教的是一樣的:
4 > 3 // true
5 > 192901.2 //false
"fudge" > 8 // false, 該操作無效
<(小於)
判斷左側的值是否小於右側的值,仍然跟數學課上教的一樣:
3 < 2 // false
'g' < 106 // 'g' 在ascii裡的值為103,所以結果為true
-100 < 100 // true
>=(大於或等於)
判斷左側的值是否大於或等於右側的值,數學課也是這麼教的:
3 >= 3 // true, 因為它們相等
0 >= -0.001 // 0大於-0.001, 因此結果是true
'?' >= 'h' // false, 因為 '?'的ascii 碼是63 ,而'h'是104
4 >= 28 // false
<=(小於或等於)
13.001 <= 13.001 // true, 它們相等
0 <= -0.001 // 0 比-0.001大, 因此結果為false
'!' <= '7' // true, 因為 '!'的 ascii碼是33,而'7'是55
&&
判斷左側的語句和右側的語句是否同時為true:
(4 > 3) && ('f' > '1') // true
((5 * 2) == 10) && ((6 - 3) != 4) // true
(5 < 10) && (2 > 4) // false, 左側為true但右側不是
||
判斷左邊的語句和右邊的語句中是否至少有乙個為true:
(4 < 3) || ('f' > 'e') // true, 儘管左側為false,但右側為true
((5 * 2) == 10) || ((6 - 3) != 4) // 兩側都為true
('b'=='g') || (2 > 4) // false, 兩側都為false
對於以上的比較和判斷,你可能還心存不解,他們到底用來做什麼。別急,在控制語句裡,它們就能一展身手了。表2-2列出了上述所有運算子及其用法。
表2-2:運算子及其用法
算符 用法
+,-,*,/ 加,減,乘,除
% 取模,返回除法運算的餘數
= 賦值,把右側的值賦給左側變數
+=,-=,*=,/= 數學賦值;用右側的值加、減、乘、除左側變數原值,並把結果賦給左側變數
++ 向左側變數加1
-- 從左側變數減1
== 比較左右兩側的值,如果相等,表示式結果為true
!= 比較左右兩側的值,如果不相等,表示式結果為true
>,>= 比較左右兩側的值,如果左側值大於或不小於右側值,表示式結果為true
<,<= 比較左右兩側的值,如果左側值小於或不大於右側值,表示式結果為true
&& 比較左右兩側表示式的結果,如果兩側都為true,則結果為true
|| 比較左右兩側表示式的結果,只要其中一側為true,則結果為true
《互動式程式設計 第2版》一1 3 設計與互動
偉大的工業設計師henry dreyfuss把設計稱為 對人的測量 意思是,設計是理解和分析人類行為的絕佳途徑。如何定義 設計 一詞,這留給別人去想 而我則關注互動設計作為 創作一種工具或方法 的方面,我們使用這種工具或方法完成一些特定的事情。需要完成的事情越具體或特殊,所需的工具就越要精雕細刻,互...
《互動式程式設計 第2版》一2 7 作用域
作用域有時讓人很討厭,由它而起的問題通常難以定位。幸而要避免這樣的問題其實還挺簡單。先看一段processing void setup i 1 print i 我們在第3章會仔細講processing平台,現在你看不懂也沒有關係,直接編譯它。編譯之後processing的控制台視窗會彈出些有趣的訊息...
《互動式程式設計 第2版》一2 7 作用域
作用域有時讓人很討厭,由它而起的問題通常難以定位。幸而要避免這樣的問題其實還挺簡單。先看一段processing void setup i 1 print i 我們在第3章會仔細講processing平台,現在你看不懂也沒有關係,直接編譯它。編譯之後processing的控制台視窗會彈出些有趣的訊息...