首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >unsigned signed下溢机制

unsigned signed下溢机制
EN

Stack Overflow用户
提问于 2013-03-02 17:33:40
回答 4查看 1.3K关注 0票数 4

我知道以下几点

代码语言:javascript
运行
复制
unsigned short b=-5u;

由于下溢,计算结果为b为65531,但我不明白是否5u在转换为-5之前转换为有符号整数,然后再转换回无符号整数以存储在b中,或者-5u等于0- 5u (不应该是这样,-x是一元运算符)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-03-02 17:43:05

5u是一个文字无符号整数,-5u是它的反..对无符号整数的求反定义为从2**n中减去,其结果与从零中包装减法的结果相同。

票数 5
EN

Stack Overflow用户

发布于 2013-03-02 17:45:54

5u是一个单一的令牌,一个具有unsigned int类型的右值表达式。一元-运算符是根据无符号算术规则(以2^n为模的算术,其中n是无符号类型中的位数)应用于它的。结果被转换成unsigned short;如果它们不符合(如果是sizeof(int) > sizeof(short),它们就不适合),转换也将使用模算法(模2^n,其中n是目标类型中的位数)。

可能值得注意的是,如果原始参数的类型为unsigned short,则实际的步骤是不同的(尽管结果总是相同的)。因此,如果你已经写了:

代码语言:javascript
运行
复制
unsigned short k = 5;
unsigned short b = -k;

第一个操作将取决于short的大小。如果int比int小(通常,但不总是这样),第一步是将k提升为int。(如果short和int的大小相同,那么第一步就是将k提升为unsigned int;从那时起,一切都会如上所述。)根据带符号整数算术的规则,将一元-应用于此int (因此,结果值为-5)。如上所述,生成的-5将使用模算法隐式转换为unsigned short

一般来说,这些区别不会有什么不同,但在可能有一个整数值INT_MIN的情况下,它们可能会有;在2的补码机器上,-i,其中i具有类型int,值INT_MIN是实现定义的,当稍后转换为无符号时,可能会产生奇怪的值。

票数 3
EN

Stack Overflow用户

发布于 2013-03-02 17:56:41

ISO/IEC 14882-2003年第4.7节规定:

“如果目标类型是无符号的,则结果值是与源整数相同的最小无符号整数(模2^n,其中n是用于表示无符号类型的位数)。注意:在二进制补码表示中,此转换是概念性的,位模式没有变化(如果没有截断)。-end注意

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

https://stackoverflow.com/questions/15172936

复制
相关文章

相似问题

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