相关疑难解决方法(0)

在C++中有符号整数溢出仍然是未定义的行为吗?

众所周知,有符号整数溢出是未定义的行为.但是C++ 11 cstdint文档中有一些有趣的东西:

有符号整数类型,宽度分别为8,16,32和64位,没有填充位,负值使用2的补码(仅当实现直接支持该类型时提供)

见链接

这里是我的问题:由于标准明确地说,对int8_t,int16_t,int32_tint64_t负数是2的补,仍然是这些类型的未定义行为的泛滥?

编辑我检查了C++ 11和C11标准,这是我发现的:

C++ 11,§18.4.1:

标题定义了所有函数,类型和宏,与C标准中的7.20相同.

C11,§7.20.1.1:

typedef名称intN_t指定有符号整数类型,其宽度为N,无填充位和二进制补码表示.因此,int8_t表示这样的带符号整数类型,其宽度恰好为8位.

c++ integer-overflow undefined-behavior c++11

74
推荐指数
2
解决办法
2万
查看次数

当我混合有符号和无符号类型时会发生什么?

我正在学习C++语言,我对类型转换有一些疑问,你能解释一下像这样的表达式会发生什么:

unsigned int u = 10; 
int a = -42; 
std::cout << u - a << std::endl;
Run Code Online (Sandbox Code Playgroud)

在这里我知道如果我在有两个数学运算符时应用规则,结果将是52.但我想知道当编译器将a转换为无符号值时会发生什么情况会产生一个临时的无符号类型,之后会发生什么?表达式现在应该是10 -4294967254.

c++ unsigned expression built-in-types

18
推荐指数
2
解决办法
6517
查看次数