gpt4 book ai didi

导致溢出的混合整数类型的 C++ 算术

转载 作者:搜寻专家 更新时间:2023-10-31 01:46:54 30 4
gpt4 key购买 nike

我在 VC++2010 中做过一些混合不同大小的操作数导致添加操作溢出的测试:

int _tmain(int argc, _TCHAR* argv[])
{
__int8 a=127;
__int8 b=1;
__int16 c=b+a;
__int8 d=b+a;
printf("c=%d,d=%d\n",c,d);

return 0;
}

//result is: c=128, d=-128

我不明白为什么c==128!我的理解是,在这两个加法中,b+a 仍被视为加法 2 个带符号的 8 位 变量。所以结果是溢出,即 -128。 在那之后,然后将结果提升为第一个赋值操作的 16 位有符号整数,并且 c 仍应获得 16 位 -128 值。我的理解正确吗? C++ 标准有点难读。第 4 章似乎在谈论整数提升,但我找不到与这个具体示例相关的任何内容。

最佳答案

My understanding is that in both additions, b+a are still considered addition of 2 signed 8 bit variables. So the result is an overflow i.e. -128.

不,提升发生在 + 被评估之前,而不是之后。当 ab 都为正时,就会发生加法。两个数字都被提升为 int 以进行加法运算,作为两个正数相加,然后转换为 16 位短整型。在这个过程中,结果不会因溢出而变为负数,因此最终结果为 128。

可以说,这是有道理的:ab 的行为与数学中两个数字的行为相匹配,使语言从业者更直观。

关于导致溢出的混合整数类型的 C++ 算术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20031343/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com