【问题标题】:Storing difference of unsigned variables into signed variables将无符号变量的差异存储到有符号变量中
【发布时间】:2014-12-01 05:51:48
【问题描述】:

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

考虑下面的例子:

#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;

}

如果后面程序中用到了带符号的变量,会不会有什么潜在的问题?

【问题讨论】:

  • 仅当您在ab 中存储大于INT_MAX 的值时。

标签: c++ c unsigned signed


【解决方案1】:

是的,你可能会溢出。

2个无符号整数的差异可以和一个无符号整数一样大,并且不适合一个有符号整数(相同类型)[除非你要环绕到负数,但很确定你不想要那个]。

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

a = unsigned Int max;
b = 0;

【讨论】:

  • @Mitch:我没看懂测试用例。你能详细说明一下吗?
  • 无符号最大值 = 2 *(有符号最大值)(给或取 1)
猜你喜欢
  • 2016-08-27
  • 2015-12-28
  • 1970-01-01
  • 2016-10-09
  • 2010-10-11
  • 2021-09-09
  • 2019-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多