首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对无符号字符的减法运算

对无符号字符的减法运算
EN

Stack Overflow用户
提问于 2014-01-29 04:18:45
回答 2查看 4.5K关注 0票数 0

我对未签名的查尔很好奇。我对未签名的查尔很好奇。我无意中对未签名的char做了减法手术,我知道我不应该那样做。但我有点好奇一个特别的答案是怎么来的。有人能解释一下这一点吗?

代码语言:javascript
复制
unsigned char x = 150;
unsigned char y = 229;

unsigned char z = x - y;

最后,在调试过程中,我得到了177 for z。

我正在visual 2008中运行此代码。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-29 04:28:03

声明为无符号整数的无符号整数应遵守算术模2^n的定律,其中n是整数的值表示中的位数。

(C++11标准,3.9.1.5)

在大多数平台上,一个unsigned char是8位,所以结果是150-229 mod 256 = -79 mod 256 = 177。

票数 4
EN

Stack Overflow用户

发布于 2014-01-29 04:26:10

是的,如果你从229中减去150,你就会得到-79。但是,由于目标的原因,您被限制在范围0..255 (假设为8位),因此它封装起来,以确保范围得到维护。因此,您基本上可以将256添加到-79中,以便以177结束。

换句话说,9 - 10给出了一个有符号值的-1,实际上给出了8位unsigned char255。类似地,9 - 11会给您254

这与加法没有什么不同,因为255 + 7给了您6,因为它返回到0后面的255

现在,规则比可以将值提升到更大的数据类型,然后执行减法,然后截断结果的规则要复杂一些。但从数学上讲,第一段是正确的。

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

https://stackoverflow.com/questions/21421998

复制
相关文章

相似问题

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