![printf打印""_printf ] 打印_sprintf](http://h.hiphotos.baidu.com/zhidao/wh%3D450%2C600/sign=e076f60931fae6cd0ce1a3653a832312/bd315c6034a85edffaece91d4d540923dd5475af.jpg)

计算的顺序是先算hour*60 + minute得到一个结果,然后算右边的等号,就是把hour*60 + minute的结果赋给变量total_minute,这个结果同时也是整个表达式total_minute = hour*60 + minute的值,再算左边的等号,即把这个值再赋给变量total。同样优先级的运算符也是从左到右计算还是从右到左计算称为运算符的结合性(Associativity)。+-*/是左结合的,等号是右结合的。
比如在一条语句中完成计算、赋值和打印功能:

理解组合(Composition)规则是理解语法规则的关键所在,正因为可以根据语法规则任意组合,我们才可以用简单的常量、变量、表达式、语句搭建出任意复杂的程序。
根据语法规则组合出来的表达式在语义上并不总是正确的。例如:

等号左边的表达式要求表示一个存储位置而不是一个值,这是等号运算符和+-*/运算符的又一个显著不同。有的表达式既可以表示一个存储位置也可以表示一个值,而有的表达式只能表示值,不能表示存储位置,minute + 1这个表达式就不能表示存储位置,放在等号左边是语义错误。表达式所表示的位置称为左值(lvalue)(允许放在等号左边),而以前我们所说的表达式的值称为右值(rvalue)(只能放在等号右边)。上面的话换一种说法就是:有的表达式既有左值也有右值,而有的表达式只有右值。
如果三个变量int a, b, c;,表达式a = b = c是合法的,先求b = c的值,再把这个值赋给a,而表达式(a = b) = c是不合法的,先求(a = b)的值没问题,但(a = b)这个表达式不能在做左值了,因此放在 = c的等号左边是错的。printf ] 打印
关于整数除法运算有一点特殊之处:

执行结果是11 and 0 hours,也就是说59/60得0,这是因为两个int型操作数相除的表达式仍为int型,只能保存计算结果的整数部分,即使小数部分是0.98也要舍去。
要得到更精确的结果可以这样:

在第二个printf中,表达式是minute / 60.0,60.0是double型的,/运算符要求左右两边的操作数类型一致,而现在并不一致。C语言规定了一套隐式类型转换规则,在这里编译器自动把左边的minute也转成double型来计算,整个表达式的值也是double型的,再格式化字符串中应该用%f转换说明与之对应。
6. 字符类型与字符编码
字符常量或字符型变量也可以当作整数参与运算,例如:

执行的结果是b.
符号在计算机内部也用数字表示,每个字符在计算机内部用一个整数表示,称为字符编码(Character Encoding),目前最常用的是ASCII码。之前我们说“整型”是指int型,而现在我们知道char型本质上就是整数,只不过范围比int型小,所以以后我们把char型和int型统称为整数类型(Inteager Type)或简称整型。
字符’a’~’z’、’A’~’Z’、‘0‘~’9’的ASCII码都是连续的,因此表达式’a’+25和‘z’的值相等,’0‘+9的值也相等。注意’0‘~’9‘的ASCII码是十六进制的30~39,和整数值0~9是不相等的。
字符也可以用ASCII码转义序列表示,这种转义序列由\加上1~3个八进制数字组成,或者由\x或大写\x加上1~2个十六进制数字组成,可以用在字符常量或字符串字面值中。例如‘\0’表示NUL字符,‘\11’或’\x9’表示Tab字符,“\11”或”\x9”表示由Tab字符组成的字符串。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-54745-3.html
不过这的确是美国给中国施压