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

标签 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;

}

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

最佳答案

是的,你可能会溢出。

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

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

a = unsigned Int max;
b = 0;

关于c++ - 将无符号变量的差异存储到有符号变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27222430/

相关文章:

c++ - 我做错了什么?,在 C++ 中链接

c++ - 将 shared_ptr<Derived> 作为 shared_ptr<Base> 传递

c - 在结构中引用未定义的类型如何合法?

C:在文件中使用 CR

c++ - 用 64 位替换 32 位循环计数器会在 Intel CPU 上使用 _mm_popcnt_u64 引入疯狂的性能偏差

c++ - 单文件 Makefile 问题 : C++

c - 车辆避障传感器

iOS : unsigned long with big factorial

c++ - 可移植的有符号/无符号字节转换,C++

c - 算术运算期间的数据类型提升 : -1 < (unsinged int) 1 == false