首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >升级到未签名是在结果还是在每个操作数上完成?

升级到未签名是在结果还是在每个操作数上完成?
EN

Stack Overflow用户
提问于 2014-09-23 18:05:42
回答 1查看 54关注 0票数 0

在以下方面:

2147483647U > -2147483647 - 1由于将转换/升级为未签名,所以它将计算为false。

我的问题是如何推广?

减法操作是先进行,结果将提升为无符号,还是每个操作数将被提升为无符号操作?

示例具有4个位-8,7用于签名,0,15用于无符号:

7U > -7 -1

这是否变成(无符号)(-7)+(无符号)(-1)= (9U) + (15U) = 24U

所以我们最终得到的是7U > 24U,这是假的。

或者我们会有

-7-1 = -8 = 8U

所以7U > 8U是假的

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-23 18:14:20

这句话

代码语言:javascript
复制
2147483647U > -2147483647 - 1

有两个运算符,其中减号的优先级高于逻辑>。

因此,首先有计算的子表达式。

代码语言:javascript
复制
-2147483647 - 1

这两个操作数都有int类型。这是他们共同的类型。因此,这两项推广都不会完成。你会得到

代码语言:javascript
复制
-2147483648

然后表达

代码语言:javascript
复制
2147483647U > -2147483648

会被评估。

这里常见的类型是无符号int。有符号的int和无符号的int具有相同的秩,但是在这种情况下,常见的类型是无符号int。

在这个表达式中,右操作数的内部表示法被解释为无符号值。因此,如果它大于左操作数,则结果将等于false。

如果考虑这个例子

代码语言:javascript
复制
7U > -7 -1

那么-7 - 1将等于-8.-8的内部表示形式是

代码语言:javascript
复制
1000

作为无符号int,它等于8。

代码语言:javascript
复制
7u > 8u

等于虚假。

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

https://stackoverflow.com/questions/26001824

复制
相关文章

相似问题

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