基磁加识嘉 //定义一个整数类型的变量,用来存放后面算式的值 int logic int a= l logic- a+b>c&&b<-ci printf("logic &d\n",logic); logic" a> printf ("logic = 8d\n", logic)i ogic"!(a<c}+b!-1b(a+c)/2; printf("logic s sd\n", logic)i 程序分析 程序中的三个输出是0、0和1,即分别为假、假、真。下面分析一下程序中三个算式的 运算顺序。 算式一:a+b>c&&b<=c,实际上可表示成(a+b))&&(b<=c)。C首先进行算术运算a+b 其值为3(真),然后才根据关系和逻辑运算符的优先级进行运算,即分别运算3>c和b=c, 它们的值非别为0(假)和1(真),最后将0和1相与(&&),得出最终结果为0(假)。 算式二:a-b+c&kb=c,在程序中亦可写成(a>=(b+c)&&(b=c)。首先得出bc的值为 5(真),再分别计算出a>=5和b==c,值分别为0(假)和0(假),将它们相或后,可得输出 为0(假)。 算式三:la<c)Hb!=l&&(ac)2,可写成(a<c)+b)=1)&&(a+c2)。由于嵌套括号的计算 顺序是由里向外,所以算式的计算顺序可表示如下 (a<c+b)-1)&&(a+)2)→(!1b)1)&&(42)→(0+b)-1)&&(42) →1&&2→1 输出结果为1。 (7
4自增自减 实例说明 C语言中有两个很有用的运算符,通常在其它计算机语言中是找不到它们的,那就是自增 和自减运算符:++和-。自增运算符++对操作数增加一个单位,而自减运算符-对操作数减 小一个单位。 本例正是要向读者介绍这两个运算符,使读者能够熟悉这两个运算符的一般用法。此外 自增和自减运算符是既能放在操作数之前,也能放在操作数之后的,但在具体的运算当中,这 两种方法是有区别的,这也是本例所要讲述的重点,希望读者能够注意。 453 知识要点 在表达式当中,自增和自减运算符在操作数前或后是有区别的。增减运算符位于操作数 之前时,C先实施增减操作,然后才使用操作数的值;若增减运算符是在操作数的后边,那 么,C是先使用操作数的值,而后再相应增减操作数的内容。 注意点: (1)自增运算符(++)和自减运算符(--),只能用于变量,而不能用于常量或表达式 (2)++和的结合方向是“自右向左”。 早 程序源码 该应用程序的源代码如下: t include <stic.h> void main() int i, 3,k; int m, n, pi j-10 k·12 ∥/自增在操作数之前
第一蔫基破织蔫 printf("=8dn”,i) printf("m sd\n",m); //自减在操作数之后 print(""8dn”,j; printf"n8dⅦn",n); ∥/自增、自减的混合运算 p=(++m)*(n++)+(--k) printf("k s sd\n", k)i printf("p- 8d\n", p) 程序分析 在算式m=+i中,对整形变量i进行了自增运算。由于自增运算符是置于i之前,所以 是先对i进行加1操作,此时i的值已不再是8,而是9,然后再将自增后的i赋给变量m,所 以得到的输出为9 算式n=j是对变量j进行的自减操作,自减运算符位于操作数j之后,因此,赋给变量 n的值就是j的原值10,变n的输出为10,然后才进行自减操作,这时j的值减1变为9 最后进行的运算是同时包含自增和自减的混合运算。对于操作数m和k而言,自增和自 减运算符位于它们之前,所以它们在算式中的值是经过自加和自减的,而对于变量n而言,自 增运算符是位于它之后,因此它在算式中是以原值进行计算的。此时,我们再分析算式p= (++m)(n++)+(-k),它实际上可以写成p-10*10+11所以变量p的输出结果为11l
自程百個 5}普通位运算 实例说明 所谓位运算是指进行二进制位的运算。因为C语言的设计目的是取代汇编语言,所以它 必须支持汇编语言所具有的运算能力,因此,C语言提供了位运算的功能,这样与其他高级语 言(如 PASCAL)相比,它便具有了很大的优越性。 C语言共提供了六个位运算符,本例重点向读者介绍其中四个,它们分别是按位与(&)、 按位或(1)、按位异或(^)以及取反(-)。其他两个位运算符会在下一个例子中介绍。 知识要点 下面将对程序中所涉及到的四个位运算符的具体使用规则作详细介绍。 按位与(&)运算符:参加运算的两个运算量,如果都为1,则该位为1,否则为0 按位或()运算符:两个相应位中只要有一个为1,则该位的结果为1 按位异或(^)运算符:参加运算的两个相应位,同号则结果为0(假),异号则结果为 (真)。 取反(~)运算符:它是一个单目(元)运算符,用来对一个二进制数按位取反,即将0 变为1,1变为0 注意点: (1)位运算符中除了取反(~)运算符以外,其他的均为二目(元)运算符,即要求两 侧各有一个运算量。 (2)位操作是对字节或字中的位(bt)进行测试、置位或移位处理,这里字节或字是针 对C标准中的char和int数据类型而言。因此,位操作不能用于foat,、 double、 long double void及其他复杂类型。 早 程序源码 该应用程序的源代码如下: 暑 include< stdio,h> void main() /定义了一个无符号字符型变量,此变量只能用来存储无符号数
篇基融知9蔫 unsigned char result iabc !对变量进行“按位与”操作 result a&c; printf("result sd\n", result); /′对变量进行“按位或”操作 result eb d; printf("result- id\n", result); /对变量进行“按位异或”操作 result m aa d; printf("result a gd\n", result)i /对变量进行“取反”操作 result ai printf("result Sd\n", result) 程序分析 在实例中,对操作数进行的几个位运算都是极简单的位运算,目的仅是使读者能够了解它 们的运算规则。首先,读者把程序中定义的变量按照二进制的格式写出,然后再根据本例“知 识要点”中的阐述,不难得出结果,结果分别是2、12、10和253