表达式计算过程中的类型转换,经常被忽略的问题
2011-07-17 20:28
337 查看
#include <stdlib.h>
#include <stdio.h>
char arr[]={'a','b','c','d','e'};
#define ARRAY_LENGTH sizeof(arr)
int main()
{
int i=-1;
if(i>ARRAY_LENGTH)
printf("a bug?");
else
printf("not a bug");
return 0;
}
结果输出是“a bug?”
原因:
一、sizeof函数的返回值类型是unsigned int型的,
二、在求表达式"i>ARRAY_LENGTH"的值的时候对i进行了类型转换,把i转换为了unsigned int类型,(unsigned int)(-1)的值是4294967295
解决方法:
对ARRAY_LENGTH进行强制类型转换,也就是把if(i>ARRAY_LENGTH)改为if(i>(int)ARRAY_LENGTH)
结论:
程序中尽量避免使用unsigned类型,很可能会引起不必要的麻烦
#include <stdio.h>
char arr[]={'a','b','c','d','e'};
#define ARRAY_LENGTH sizeof(arr)
int main()
{
int i=-1;
if(i>ARRAY_LENGTH)
printf("a bug?");
else
printf("not a bug");
return 0;
}
结果输出是“a bug?”
原因:
一、sizeof函数的返回值类型是unsigned int型的,
二、在求表达式"i>ARRAY_LENGTH"的值的时候对i进行了类型转换,把i转换为了unsigned int类型,(unsigned int)(-1)的值是4294967295
解决方法:
对ARRAY_LENGTH进行强制类型转换,也就是把if(i>ARRAY_LENGTH)改为if(i>(int)ARRAY_LENGTH)
结论:
程序中尽量避免使用unsigned类型,很可能会引起不必要的麻烦
相关文章推荐
- Java开发过程中经常碰到数据类型的问题
- Action参数封装过程中,数据类型转换问题
- 变量在进行计算时类型转换问题
- 【C语言】表达式求值中的类型转换问题
- IT笔试题中经常出现的前缀、中缀、后缀表达式转换问题-----阿冬专栏
- SpringBoot 整合 Shiro 过程中遇到奇怪的类型转换问题
- 将java的集合转换为数据库集合类型 解决weblogic调用存储过程的时候,返回值乱码问题
- 表达式类型转换问题
- Java中不同数值类型间转换与计算精度丢失问题
- Java中不同数值类型间转换与计算精度丢失问题
- 写代码过程中遇到“类型转换小问题”
- Java开发过程中经常碰到数据类型的问题
- 简单而容易忽略的类型转换问题
- 怎样解决thephile中的数据库由于排序造成的问题:对 text 数据类型不支持代码页转换。从: 1252 到: 936
- SpringMVC日期类型转换问题三大处理方法归纳
- 数据类型转换不当导致数据库不能正确插入数据问题
- 关于C#数据类型之间转换的问题!
- 类型转换的一个问题
- 正则表达式匹配过程中堆栈溢出问题
- 第五章 表达式(part3) 复合表达式的求值、new 和 delete 表达式、类型转换