如果我将未签名的int添加到负int且算术结果是正面的,会发生什么
What happens if I add an unsigned int to a negative int and the arithmetic result is positive?
当我要执行以下代码时,我认为签名的int我会转换为unsigned,结果将是一些很大的正数,但结果是2
int main()
{
unsigned u = 10; int i = -8;
std::cout << u + i << std::endl;
return 0;
}
执行添加时,在操作数上执行通常的算术转换,该操作数([Expr]/11.5.3):
- 否则,如果具有无符号整数类型的操作数的等级大于或等于其他操作数的等级, 具有签名整数类型的操作数应转换为 具有无符号整数类型的操作数。
因此,-8
转换为无符号号码。根据[Cons.Integral]/2的说法如下:
如果目标类型未签名,则结果值是最小的 符合源整数的未签名整数(Modulo 2 n 其中n是用于表示未签名类型的位数)。
将我们的号码转化为(MAX_UINT + 1) - 8
。现在,由于未签名的添加是模块化2 n ([[BASIC.FUNDAMENTALT]/4):
未签名的整数应遵守算术模量2 n ,其中n是整数的值表示中的位数。
结果必须是 (MAX_UINT + 1) - 8 + 10
modulo MAX_UINT + 1
,那只是 2
。
相关文章:
- 为什么这个程序的结果是3 "born"?和 4 死
- 分配给浮点数的积分文字除法 - 为什么结果是错误的?
- C++初始化的结果是什么?
- 我的输出结果是 0 英寸C++.可能是什么问题
- char () 和 int () 是 C++ 中的函数吗?
- 在C++中使用 fread() 来解释这个结果是什么?
- 为什么int foo()是右值,而int&foo()在这个例子中是左值?
- 为什么双算的结果是错误的?
- int(int)& 或 int(int) const &是什么类型?
- 为什么一个简单的C++程序会有错误的结果?是 #define 引起的吗?
- 错误:成员引用基类型"uint32_t"(也称为"无符号 INT")不是结构或联合
- 在运行libtorch的模型时获得的结果是不正确的,该模型经过训练并从Pytorch出口
- int (abc)(int,int) 是什么意思
- 是迭代器增量结果是新的迭代器
- 结果是不同的;C++ 中的 recv(sock,buf,sizeof(buf),0) 和 strlen(buf)
- 根据C++标准,int 变量是对象吗?
- 如果我将未签名的int添加到负int且算术结果是正面的,会发生什么
- 当我们在int上进行操作时,结果是暂时存储在int中的结果
- 将双精度转换为 int 的结果是错误的
- 为什么~x在int上的结果是-(x+1) ?