博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《编写高质量代码:改善c程序代码的125个建议》——建议2-2:使用显式声明为signed char或unsigned char的类型来执行算术运算...
阅读量:6318 次
发布时间:2019-06-22

本文共 1159 字,大约阅读时间需要 3 分钟。

本节书摘来自华章计算机《编写高质量代码:改善c程序代码的125个建议》一书中的第1章,建议2-2,作者:马 伟 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

建议2-2:使用显式声明为signed char或unsigned char的类型来执行算术运算

在讨论本建议话题之前,我们先看看下面的这段代码的输出结果,如代码清单1-1

所示。

代码清单1-1 char使用示例 #include 
int main(void) { char c=150; int i=900; printf("i/c=%d\n", i/c); return 0; }

在代码清单1-1中,或许大多数人都认为它输出的结果应该是“i/c= 6”,但实际的输出结果却大相径庭。前面已经讲过,char类型的变量c可以有两种类型:有符号的(signed char)和无符号的(unsigned char)。这里假设char是8位的补码字符类型,那么代码清单1-1就可能输出“i/c=-8”(signed char)或者“i/c= 6”(unsigned char)两种结果。其中,在Microsoft Visual Studio 2010与GCC中的输出结果都是“i/c=-8”,如图1-4与图1-5所示。

<a href=https://yqfile.alicdn.com/912b8589f10bc9e379bbcd2fa8df9ebd1d761fc7.png" >
其实,导致这种结果最根本的原因就在于我们不能够准确地确定char类型的变量c究竟是signed char类型还是unsigned char类型。因此,我们把决策权交给编译器,而不同的编译器默认的char类型是不同的,所以最后得到的结果也就不相同。
解决这种问题的办法很简单,就是显式地将char类型的变量c声明为signed char或unsigned char类型,这样可保证结果的唯一性,如代码清单1-2所示。
代码清单1-2 unsigned char使用示例#include 
int main(void) { unsigned char c=150; int i=900; printf("i/c=%d\n", i/c); return 0; }

这样就显式地将char类型的变量c声明为unsigned char类型,现在,后面的除法运算(i/c)与char的符号无关,所以代码清单1-2输出的结果为“i/c= 6”。

转载地址:http://jojaa.baihongyu.com/

你可能感兴趣的文章
完毕port(CompletionPort)具体解释 - 手把手教你玩转网络编程系列之三
查看>>
iOS8 Push Notifications
查看>>
各大名企笔试及面经大全(程序猿必读)
查看>>
Oracle 连接、会话数的查看,修改
查看>>
Oracle 11g password过期被锁定报道 ORA-28000 the account is locked
查看>>
轨磁条简介
查看>>
大厂前端高频面试问题与答案精选
查看>>
如何设计高扩展的在线网页制作平台
查看>>
Git 2.5增加了工作树、改进了三角工作流、性能等诸多方面
查看>>
深度揭秘腾讯云低功耗广域物联网LPWAN 技术及应用
查看>>
与Jeff Sutherland谈敏捷领导力
查看>>
More than React(四)HTML也可以静态编译?
查看>>
React Native最佳学习模版- F8 App开源了
查看>>
云服务正在吞噬世界!
查看>>
Web语义化标准解读
查看>>
高性能 Lua 技巧(译)
查看>>
区分指针、变量名、指针所指向的内存
查看>>
异步编程的世界
查看>>
最近话题火爆的四件事你知道不?
查看>>
SpringBoot整合MyBatis
查看>>