将无符号变量的差异存储到有符号变量中

时间:2014-12-01 05:51:48

标签: c++ c unsigned signed

将两个无符号整数变量的差异存储到有符号整数变量中是否存在任何潜在问题?

考虑以下示例:

#include <stdio.h>

int main()
{
    unsigned int a, b, d1;
    signed int d2;

    a = 20;
    b = 200;

    d1 = a - b; 
    d2 = a - b; // Line 1

    printf("d1 = %u\n", d1);
    printf("d2 = %d\n", d2);

    return 0;

}

如果稍后在程序中使用了signed变量,是否存在任何潜在问题?

1 个答案:

答案 0 :(得分:2)

是的,你可能会溢出。

2个无符号整数的差异可能与无符号整数一样大,并且不适合有符号整数(相同类型)[除非你要回转为负数,但很确定你没有想要那个]。

您可以轻松验证测试用例:

a = unsigned Int max;
b = 0;