首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是(INT32_MIN + 1)当int32_t是一个扩展整数类型,int是32位标准整数类型

什么是(INT32_MIN + 1)当int32_t是一个扩展整数类型,int是32位标准整数类型
EN

Stack Overflow用户
提问于 2017-12-28 17:18:03
回答 1查看 2.1K关注 0票数 9

想象一下这种情况。int32_t是一个扩展整数类型,它用两个补码表示(作为标准要求的int32_t来表示)。这意味着INT32_MIN-2147483648 (0x80000000)。

同时,int标准整数类型,它以补语(标准允许的情况下)表示。这意味着INT_MIN-2147483647

现在,如果我错了,请纠正我,但我认为两种类型的都有相同的宽度,这意味着,根据6.3.1.1.1 (强调我的):

任何标准整数类型的秩均应大于具有相同宽度的任何扩展整数类型的秩。

因此,int32_t的秩比int的低。

现在6.3.1.8 (通常的算术转换)说(强调我的):

<...>否则,整数提升将在两个操作数上执行。然后,对提升的操作数应用以下规则:如果两个操作数具有相同的类型,则不需要进一步的转换。否则,如果两个操作数都有符号整数类型或两者都具有无符号整数类型,则将具有较小整数转换秩类型的操作数转换为具有更大秩的操作数的类型。

因此,如果正确理解它,那么在这个代码块中:

代码语言:javascript
复制
int32_t x = INT32_MIN;
int y = 1;
x + y; // What happens here?

在表达式x + y中,必须将x提升为int,而INT32_MIN超出了int的范围。

这是标准中的错误还是我遗漏了什么?

换句话说,按照标准的定义,这个上下文中的x + y表达式是什么?

EN

回答 1

Stack Overflow用户

发布于 2017-12-28 17:20:57

同时,int是一个标准的整数类型,它用补语表示。

扩展整数是实现定义的,只需要是二进制数,有符号整数必须用一个补数、两个补数或符号和幅度表示法表示。

intxx_t是一个固定大小的int类型,它必须具有与int相同的表示形式。因为intxx_t是两个补码,所以它要求int是相同的。

票数 -5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48011642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档