关于有符号数与无符号数的建议
来源:互联网 发布:全包半包和清包 知乎 编辑:程序博客网 时间:2024/05/18 03:29
有符号数到无符号数的隐式强制类型转换导致了某些非直观的行为。这些非直观的行为经常导致程序错误,并且这种包含隐式强制类型转换细微的错误很难被发现。
下面两个例题说明了某些由于无符号数隐式强制类型转换造成的细微错误。
Ex1:
float sum_elements(float a[],unsigned length){ int i; float result=0; for(i=0;i<=length-1;i++) result+=a[i]; return result;}
当参数等于0时,运行这段代码应该返回0.0。但实际上,运行时会遇到一个存储器错误。
这是因为length是无符号类型,当它与有符号类型在一起运算时,有符号会隐式转换为无符号类型,而length=0传入后,得到-1的无符号类型,所以i<=unsigned(-1)。而无符号-1是一个很大的整数,这样就会超出数组的范围产生存储器错误。有两种方法可以修改上面的错误:1)把length令为int类型;或2)for语句中的判断语句改成i小于length。
其他更深入的例子的可以看《深入理解计算机系统》第二版 P53。为了避免这类错误的一种方法是绝不使用无符号数。另一种方法是确保要使用无符号的地方用的全部是无符号类型的数字,不要有无符号与有符号不匹配的情况出现(尤其是当使用函数时,返回或者传入的参数要与形参匹配)。
0 0
- 关于有符号数与无符号数的建议
- 关于有符号数与无符号数的建议
- 无符号数与有符号数
- 有符号数与无符号数
- 有符号数与无符号数
- 有符号数与无符号数
- 关于有符号数和无符号数的探讨
- 无符号数与有符号数的操作
- 无符号数与有符号数的操作
- 无符号数与有符号数转换的原理
- 有符号数与无符号数的四则运算
- 有符号数与无符号数的运算
- 有符号数与无符号数之间的转换
- 无符号数与有符号数相加的结果
- 有符号数与无符号数的加减法
- 有符号数与无符号数之间的运算
- 有符号与无符号数转化
- 有符号与无符号数的隐式转换
- Compile C++ code in Matlab with OpenCV support
- UIView 中常见的方法总结
- mysql语句删除重复记录的方法
- shell中各种符号的应用
- 计算机常用单位,及单位换算
- 关于有符号数与无符号数的建议
- DreamWeaver和VS2010如何结合开发
- SpringMVC实现文件上传的监听器
- codeforces #324 div2
- 项目整理三.excel文件转json
- 银联 支付宝sdk+demo+文档 支持64位
- UI继承图
- Android下常见的内存泄露 经典
- rdflib中SPARQL如何判断得到的结果为空