您的位置:首页 > 其它

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竟然对短整形与整形数采用了不同的转换方式,在计算整形时采用了第二种方法,在计算短整形时采用了第一种方法,造成最后的不一致。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: