避免使用无符号数
2017-08-19 10:30
155 查看
考察这样一段代码:
a是有符号整数,b是无符号整数。C语言在比较他们的大小时会进行隐式类型转换。如果执行的是
则-1被转换成4294967295,结果是a > b;如果执行的是
则结果是a < b。采取哪种方式依赖于编译器。
在g++中,输出的结果是a > b。当然,也会打出警告:warning: comparison between signed and unsigned integer expressions
为了避免这个问题,我们通常的做法是
但是,如果b大与32有符号整数的最大值2147483647,就会发生数据溢出,(int)b将会是一个负值。
因此,避免在程序中使用无符号数!!!
int a = -1; unsigned int b = 1; if (a < b) printf("a < b\n"); else printf("a > b\n");
a是有符号整数,b是无符号整数。C语言在比较他们的大小时会进行隐式类型转换。如果执行的是
if ((unsigned int)a < b)
则-1被转换成4294967295,结果是a > b;如果执行的是
if (a < (int)b)
则结果是a < b。采取哪种方式依赖于编译器。
在g++中,输出的结果是a > b。当然,也会打出警告:warning: comparison between signed and unsigned integer expressions
为了避免这个问题,我们通常的做法是
if (a < (int)b)
但是,如果b大与32有符号整数的最大值2147483647,就会发生数据溢出,(int)b将会是一个负值。
因此,避免在程序中使用无符号数!!!
相关文章推荐
- 在C++控制台项目中使用C工程代码时的注意,避免出现error LNK2019: 无法解析的外部符号
- 本附录介绍iOS系统包含的框架,它们为编写iOS平台的软件提供必要的接口。下面的表格尽可能地列出框架中的类、方法、函数、类型以及常量使用的关键前缀,请避免在您的符号名称中使用这些前缀。
- 64位无符号溢出后差1的问题: UINT(-3) + UINT64(5) ) % UINT64(5) 竟然等于了3 (后续避免使用UINT 溢出效果)
- mysql使用建议,尽量避免这些问题
- MySQL的保留关键字,使用时尽量避免
- 匈牙利符号表示法使用的前缀代码
- LaTex 使用特殊章节符号 (§)
- 使用Servlet实现文件下载的时候,避免浏览器自动打开文件
- 避免游戏中按钮边框图片的拉伸变形—NinePatchImage的使用
- Android小记-SQLiteOpenHelper正确使用避免leak
- 使用Number()避免页面上的数字被使用科学计数法显示
- 如何避免错误使用 Enum
- MDX Cookbook 04 - 在集合中实现 NOT IN 逻辑 (Minus, Except, Filter 等符号和函数的使用)
- 如何使用gcc检查动态库中符号的完整性
- linux ln -s 符号链接的使用
- <web前端>当背景图片为渐变色图片时,为避免浏览器大小问题,可以选择使用<CSS>实现渐变色,教程如下
- 避免在Java中使用Checked Exception
- 【C语言】关于宏定义中#和##符号的使用和宏定义展开问题
- tomcat下多个web应用使用相同的log4j的jar包,如何避免配置文件发生冲突
- 在cxf中使用配置避免增加字段导致客户端必须更新的问题