C语言中关于char类型的溢出下的有无符号int型输出.docVIP

C语言中关于char类型的溢出下的有无符号int型输出.doc

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言中关于char类型的溢出下的%d(u)型输出 摘要:本调试内容均在Turboc2.0环境下运行过。本机器int 为2字节,char型为1字节,char有符号时表示的整型范围是-128~127。需要注意的是:整型数据在内存中是以补码形式存储的。另外如果按%d输出,那么补码中最高位的1就变成符号位(重要)了,1代表负数,而负数是以补码存放的,转换成原码输出,%u而%u是无符号输出,最高那一位不当作符号位(同等重要)。[注意文中分段] 第一部分(存储形式) Case1: char为有符号型时(前8位写满倒数第8位的符号位) Case2:char为无符号型时(前8位写满0) 第二部分 Case1:当以%d输出时,有两种方法: 法1:如上表char型数据在内存中的表示形式,%d依据补码进行转换输出: 例1:{ char a=472; printf(“%d\n”,a); } //结果为 -40 例2:{ unsigned char a=472; printf(“%d\n”,a); }//结果为 216 依然要注意:{ unsigned char a=-150; printf(“%d,”,a); printf(%c,a); } //结果为 106,j 就是说输出%c时截取存储时的低八位就行。 【补充的深层理解】 例3: { char a=128; printf(“%d\n”,a-3); } //结果为 -131 解释:可以看出当以%d输出时,是 a的存储 1111 1111 1000 0000 + 1111 1111 1111 1101 (-3的补码) = 1111 1111 0111 1101 故为 - 131 例4 :{ char a=128; printf(“%c\n”,a-3); } //结果为 } (125对应的符号为 }) 解释:可以看出当以%c输出时,是 以a的存储低字节 1000 0000 + 1111 1101 (-3的补码) = 0111 0011 故为125 一个整型类型的变量,用任何一个超过表示范围的整数初始化,得到的值为用该整数范围作模运算后的值。 “%d”,a); }//结果为 42896-65536(模)= - 22640(在范围内) Case2:当以%u输出时,只有一种方法: 如上表char型数据在内存中的表示形式,%u依据补码进行直接输出: 例5:{ char a=472; printf(“%u\n”,a); } //结果为 65496 --安徽工业大学工商学院--刘伟伟 2013年7月

文档评论(0)

185****7617 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档