一个简单的C++问题

#include<iostream>usingnamespacestd;intmain(){unsignedintx,y=100,z=50;x=y-z;cout<<"x=... #include <iostream>
using namespace std;
int main()
{
unsigned int x,y=100,z=50;
x=y-z;
cout<<"x=y-z "<<x<<endl;
x=z-y;
cout<<"x=z-y "<<x<<endl;
}
x=z-y 中x为什么是4294967246
展开
 我来答
百度网友f799d6d9f
2010-10-04 · TA获得超过695个赞
知道小有建树答主
回答量:141
采纳率:100%
帮助的人:80.3万
展开全部
因为用了无符号型变量

y-z=50 50没有符号

但是z-y=-50
把-50赋值给你个无符号变量的话,公式是这样的(int是32位)
2^32-50=4294967246
中大heartrain
2010-10-04 · TA获得超过263个赞
知道答主
回答量:57
采纳率:0%
帮助的人:80.6万
展开全部
你的x是unsigned int类型的,即只能≥0,根据内存分配原则,它溢出即从尾部重新开始~
如果x是int类型的,既不会出现这种情况啦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
huayu00
2010-10-04 · TA获得超过315个赞
知道答主
回答量:105
采纳率:0%
帮助的人:81.7万
展开全部
内存中如果有一段10000001(二进制),如果把他当成有符号的数,那么第一个1是负号,这个数值就应该是 -1,如果当成无符号数,那数值应该是129。
无符号的50减去无符号的100,应该是个负数,但是这个负数在内存中是当成无符号的正数来取值的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式