vc2005中对无符号与有符号数相加时,自动转换数值类型时,对于短整形与整形的差别。解释的误解

最近实验了下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竟然对短整形与整形数采用了不同的转换方式,在计算整形时采用了第二种方法,在计算短整形时采用了第一种方法,造成最后的不一致。

 

 

后面char的解释是错误的:

sa+sb

sa和sb都转换成int,再相加的。

你可能感兴趣的:(C++,c,C#)