04c运算符及表达式090221.pptVIP

  • 2
  • 0
  • 约 36页
  • 2017-04-25 发布于四川
  • 举报
04c运算符及表达式090221

第4章 运算符和表达式; C语言运算符之多, 在高级语言中是少见的。但运算符的多样性和表达式的灵活性对于一个C语言的初学者来说很可能会成为机关重重的陷阱。;4.1.1 C语言运算符的种类 ;4.1.2 C语言运算符的特性 ; 4.1.3 C语言表达式的特性 ; 在同一个算术表达式中,如果参与运算的两个运算对象的数据类型不一致时,系统将自动把其中的一个进行类型转换,使两个运算对象的类型一致后再进行运算。自动转换的规则是:按“短向长靠拢”的原则进行转换。所谓“短向长靠拢”是指:占用存储空间较短的数据对象向占用存储空间较长的数据对象转换。 ;4.2 基本运算;4.2.2 算术运算; 一个合法的C算术表达式在某些情况下并不能产生预期的结果,甚至会导致程序非正常终止。这些情况被称为算术异常。算术异常要归咎于算术的自然本质(比如除以0)或归咎于计算机的自然本质(比如溢出)。所谓溢出(Overflow),是指表达式的结果超出了被赋值对象的表示范围。因为计算机本身就是有限的,所以,任何数据类型的表示范围都是有限的。因此,当数值变得过大或过小,计算机都因为不能表示而产生溢出,前者称为上溢,后者称为下溢。上溢是指运算过程中的数据的绝对值大到机器无法表示,计算机认为该数是正(负)无穷大而中断程序运行的现象;下溢是指运算中的非零数据的绝对值小到计算机在规定的字长下无法将其表示成一个非零数,而将该数强制为零的现象。; /* 本程序测试整型数的上溢 */ #includestdio.h int main() { int x = 10000; printf(x = %d\n,x=x*x); printf(x = %d\n,x=x*x); } 程序输出为: x = -7936 x = 0; /* 本程序测试实型数的上溢 */ #includestdio.h int main() { float x = 100000.0; printf(x = %g\n,x=x*x); printf(x = %g\n,x=x*x); printf(x = %g\n,x=x*x); } 程序输出为: x = 1e+10 x = 1e+20 Floating point error:Overflow.; 可见,整型数溢出和实型数溢出之间的差别。前者以错误的结果继续运行,后者一旦溢出就终止运行并报告错误。;4.4.3 关系运算; /* 本程序测试关系表达式数据对象的自动转换 */ int main(void) { char c=’A’; int i=10,j=20; float x=3e+2,y=1.88; printf(%d\n,’B’-1c); printf(%d\n,x+i=y+j); };设有如下定义: int a = 30, b = 20, c = 10; 对于关系表达式 a = b = c 读者只需运用小学的数学知识就能推断其逻辑关系是成立的,也就是说该表达式的结果应该等于1,但在C语言中,其结果是0,这个结果意味着上述表达式的逻辑关系不成立。 ;4.2.4 逻辑运算符;对于表达式: exp1 exp2 exp1 || exp2 如果下列条件有一个满足: (1)在逻辑与表达式中,exp1的计算结果为0; (2)在逻辑或表达式中,exp1的计算结果为1 则整个表达式计算完毕,即exp2保证不会被计算。这个特性,我们称其为短路。; 例如,设有定义: int a = 1,b = 2,c = 3; 在计算表达式 a b || (b=0) (c=0) 时,并不因为“”优先级高于“||”而先作“”运算。根据短路特性,它等价于: a b || ((b=0) (c=0)) 因此要特别注意这一短路特性。;4.2.5 自增和自减运算; 后缀++: ;假设我们有一个变量k的值为5: y= ++k+10; y= k++ +10; y=--k +10; y=k-- +10; y=(k+=k++); ; 当一个变量是含有多个函数参数中的一部分时,不要将自增自减运算作用于这样的变量。;4.3 其它运算 ;4.3.3 条件运算;

文档评论(0)

1亿VIP精品文档

相关文档