本节书摘来华章计算机《交互式程序设计 第2版》一书中的第2章 ,第2.3.4节,Joshua Noble 著 毛顺兵 张婷婷 陈宇 沈鑫 任灿江 译更多章节内容可以访问云栖社区“华章计算机”公众号查看。
在程序中,运算符就是编译器用来执行命令和运算的符号,例如“=”用来赋值,“==”用来比较等。运算符有三类:一是数学运算符,用于数学运算,就跟数学课上学到的一样;二是赋值运算符,用来改变变量的值;三是比较运算符,比较两个变量是否相等,谁大谁小。数学运算符的用法就跟一般数学式子里的一样。用“+”可以把两个变量相加,例如:
int apples = 5; int moreApples = apples + 3; // moreApples等于8。但若是把两组字符串相加就有所不同了,结果是两组字符串接在一起:
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 "happy" >= "sad" // 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:运算符及其用法
相关资源:程序设计抽象思想:C语言描述.[美]Eric S.Roberts(带详细书签).pdf