chapter2 数据类型 运算符和表达式.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * P* 2.7 常见问题分析 1. 数据的溢出问题 数据有其固定的表示范围,因此当数据的值超出了其范围时,将出现溢出问题。 例2.9 整型数溢出 (BC++3.0) #include stdio.h int main( ) { int a,b; a=0x7fff;//VC6平台则取0x7fffffff b = a + 1; printf(%d,%d\n,a,b); return 0; } 在上面这段程序中,变量a的值为32767,它在内存中的表示为: a: 0111 1111 1111 1111 当a加上1后,内存中的表示为: 1000 0000 0000 0000 它的实际十进制值为 -32768,与我们希望的32768的值不符,这就是因为溢出问题而产生的错误,在程序编写过程中需要注意避免。 2 P* 2. 无符号整数与有符号整数的混合运算问题 例2.10 无符号整型数与有符号整型数混合运算出错 #include stdio.h void main( ) { int x = 1; unsigned int y = 2; printf(x - y = %d , (x - y)/2 = %d \n,x - y , (x - y)/2); } 输出结果为: x – y = -1 , (x - y)/2 = 32767 按照常理,我们认为(1 - 2)/2结果应该为-0.5,截去小数后,结果应为 -1,但事实上并非如此,而是得到结果32767。 分析如下: P* 变量x,y的值分别为1和2,它在内存中的表示为: x: 0000 0000 0000 0001 y: 0000 0000 0000 0010 执行x – y操作后,根据C语言中的类型自动转换原则,计算 结果的类型应为无符号整型数,其结果在内存中的存放形 式为: x – y: 1111 1111 1111 1111 因为表达式类型为无符号型,所以(x – y)/2即“逻辑右移”1位 其结果在内存中的存放形式为: (x – y)/2: 0111 1111 1111 1111 即使仍以有符号数的形式输出,也还是32767。而不是我们 按常理应得到的数字-1。 P* 3.书写标识符时,忽略了大小写字母的区别 例2.12 标识符大小写引起的问题 #include stdio.h void main( ) { int a=5; printf(%d,A); } 编译程序把a和A认为是两个不同的变量名,而显示 出错信息。C认为大写字母和小写字母是两个不同 的字符。习惯上,符号常量名用大写,变量名用小 写表示,以增加可读性。 P* 4.忽略变量的类型,进行了不合法的运算 #include stdio.h void main() { float x,y; printf(%d,x%y); } 另注意“残值”问题! %是求余运算,得到x/y后的整余数。整型变量x和y可以进行求余运算,而实型变量则不允许进行“求余”运算。 P* 5.将字符常量与字符串常量混淆 char c; c=a; 在这里就混淆了字符常量与字符串常量,字符常量 是由一对单引号括起来的单个字符,字符串常量是 一对双引号括起来的字符序列。C规定以“\”作字符 串结束标志,它是由系统自动加上的,所以字符串 “a”实际上包含两个字符:‘a’和‘\0’,而把它赋给 一个字符变量是不行的。 P* 6.忽略了“=”与“==”的区别 数学里,“=”做赋值和恒等两用 但C语言中,“=”是赋值运算符, “= =” 是关系运算符。如下例,该语句本意是要检查a是否和4相等: if (a = 4) a = b; 建议如果想用类似于e1 = e2 的表达式作为条件判断时, 应该显式地进行比较。也就 是说,下例 if (x = y) fun( ); 应该写作: if ((x = y)!=0) fun( ); 这种写法使得代码一目了然。 P* 小结 1、初步理解数据类型和存储类型的含义(auto)初步理解变量的本质,特定大小的内存充当数据存放的“仓库” 2、掌握运算符必须从优先级和结合性入手;避免误区“优先级高的运算一定先运算” 3、用程序设计语言的思维方式,不能用既有的数学定式理解运算过程 4、掌握自动类型转换规则

文档评论(0)

xingyuxiaxiang + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档