关于unsigned int的问题

junmayang 2008-09-11 05:13:53
这段代码的输出是什么?

unsigned int a1 = 8;
unsigned int b1 = 4294967290;
if ( a1 + b1 > a1 )
{
printf("aaa\n");
}
else
{
printf("bbb\n");
}

a1 + b1 > a1 是怎么运行的呢?
...全文
161 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
家有萌宝V 2008-09-12
  • 打赏
  • 举报
回复
a1 + b1的值超过了2^32-1,所以被截断了只有2
bo.cui 2008-09-11
  • 打赏
  • 举报
回复
你试这输出一下a1+b1的值。就明白了~~
liunanst 2008-09-11
  • 打赏
  • 举报
回复
unsigned int a1 = 8;
unsigned int b1 = 4294967290;
if ( a1 + b1 > a1 )
{
printf("aaa\n");
}
else
{
printf("bbb\n");
}
hmsuccess 2008-09-11
  • 打赏
  • 举报
回复
由于"+"运算符的优先级高于">"运算符,
所以先计算a1+b1,但是由于a1+b1=4294967298>2^32,所遇出现溢出问题,
判断可以用a1+b1<a1,
K行天下 2008-09-11
  • 打赏
  • 举报
回复
输出bbb

a1 + b1 > a1 是怎么运行的呢?
因为unsigned int a1 = 8;
unsigned int b1 = 4294967290;
a1+b1=4294967298; 但是unsigned范围最大到4294967297,溢出了,值变为了
(a1+b1)%4294967298 == 0, 0>8不成立,所以输出bbb
wangtk 2008-09-11
  • 打赏
  • 举报
回复
4294967290=0xfffffffa

a1 + b1=会溢出 自然会得到bbb的结果
zclever 2008-09-11
  • 打赏
  • 举报
回复
输出bbb
lunarfan 2008-09-11
  • 打赏
  • 举报
回复
溢出问题
mifeixq 2008-09-11
  • 打赏
  • 举报
回复
2^32 == 4294967296

所以a1+b1 == 2 //因为无符号……
所以输出
bbb
mifeixq 2008-09-11
  • 打赏
  • 举报
回复
2^32 == 4294967296

所以a1+b1 == 2 //因为无符号……
所以输出
bbb

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧