vc2005中对无符号与有符号数相加时,自动转换数值类型时,对于短整形与整形的差别。
2009-12-12 20:28
417 查看
最近实验了下vc2005中对无符号与有符号数相加时,自动转换数值类型时,对于短整形与整形的差别。具体列出来供大家参考。一段小程序
void test_unsigned(void)
{
unsigned int a = 6;
int b = -20;
cout<<"a+b = "<<a+b<<endl;
unsigned short sa = 6;
short sb = -20;
cout<<"sa+sb ="<<sa+sb<<endl;
getchar();
}
输出结果为:
同样的语句为什么会输出不同的结果呢,分析是因为微软在开发编译器时,对于无符号与有符号数之间的转换不够重视造成的BUG,现在常用的c/c++在处理无符号与有符号数计算时例如(a+b)通常采用两种方法。(1)把无符号数a转换成有符号数再与b进行计算,最后如果需要对某个数赋值,再按数值类型转换方式转换;(2)先把有符号数b转成无符号数,再计算的。而微软的VC8.0竟然对短整形与整形数采用了不同的转换方式,在计算整形时采用了第二种方法,在计算短整形时采用了第一种方法,造成最后的不一致。
void test_unsigned(void)
{
unsigned int a = 6;
int b = -20;
cout<<"a+b = "<<a+b<<endl;
unsigned short sa = 6;
short sb = -20;
cout<<"sa+sb ="<<sa+sb<<endl;
getchar();
}
输出结果为:
同样的语句为什么会输出不同的结果呢,分析是因为微软在开发编译器时,对于无符号与有符号数之间的转换不够重视造成的BUG,现在常用的c/c++在处理无符号与有符号数计算时例如(a+b)通常采用两种方法。(1)把无符号数a转换成有符号数再与b进行计算,最后如果需要对某个数赋值,再按数值类型转换方式转换;(2)先把有符号数b转成无符号数,再计算的。而微软的VC8.0竟然对短整形与整形数采用了不同的转换方式,在计算整形时采用了第二种方法,在计算短整形时采用了第一种方法,造成最后的不一致。
相关文章推荐
- VC 2005 对于CString和char*转换的理解
- 程序员之---C语言细节20(符号和有符号之间转换、两数相加溢出后数值计算)
- java中,数值计算时的类型转换 ( 两个int类型相加,赋值给double )
- 程序猿之---C语言细节20(符号和有符号之间转换、两数相加溢出后数值计算)
- C++11特有的数值、数组初始化方法、常量的符号名称 const和浮点数、bool、自动推断类型auto
- VC 2005 对于CString和char*转换的理解
- java数值类型自动转换原则
- C-基础:表达式中存在有符号类型和无符号类型时,都自动转换为无符号类型
- error LNK2019:无法解析的外部符号.lib是用vc6编的,其中用到了消息响应,vc6的消息响应函数和vc2005的消息响应函数的参数和返回值类型不同造成的链接问题.
- VC/C++ 类型转换及数值转换大全
- VC常用数据类型使用转换详解
- 数值类型(BOOL,int,运算符号,分数,三角函数,列表,元组)
- VC常用数据类型使用转换详解
- VC常用数据类型使用转换详解
- VC常用数据类型使用转换详解(转自jim97的blog)
- python类型转换、数值操作
- ASP.NET AJAX客户端编程之旅(三)——让JavaScript和C#无障碍沟通:数据类型自动转换&序列化
- 十进制任意整数类型向常见数值类型进制转换的通用办法
- vc++常用数据类型转换
- SpringMVC日期类型自动转换的处理