#include<stdio.h> int main() { unsigned int b=1; char a=-1; printf("%d",a-b); printf("%d",a-b<0); }

这个程序的运行结果为什么是-2和0呢?请高手们解答一下吧... 这个程序的运行结果为什么是-2和0呢?请高手们解答一下吧 展开
 我来答
匿名用户
2012-11-08
展开全部
先要了解c语言的隐式类型转换和强制类型转换概念,在对不同数据类型运算时,会有默认类型转换,简单来说就是非整形-》整形,有符号-》无符号。

代入你的例子:
1) a-b: a提升为unsigned int = 0xffff ffff, a -b的结果是unsigned int = 0xffff fffe
2) printf("%d", a-b), 因为你用%d就是int输出,等于强制类型转换为int,无符号的0xffff fffe 就变成 -2 了
3) printf("%d",a-b<0), 0是常量,常量默认为int,与unsigned int结果比较也要提升为 unsigned int,还是0,表达式 ,a-b<0 就相当于(unsigned int)(a-b)< (unsigned int)0,也就是 0xffff fffe < 0 ,这是个关系运算,结果当然是FALSE,也就0。
zym_hw
2012-11-08
知道答主
回答量:30
采纳率:0%
帮助的人:12万
展开全部
a=-1
b=1
a-b=(-1)-1=-1+(-1)=-2
a-b<0 如上a-b=-2 -2<0产生一个布尔值为true,在c中true为1
但是这里为什么为0呢?
只是因为字符的关系
这里的a-b=-2是一个字符
printf("%d",'-2' < 0); /*输出为0*/
printf("%d",-2 < 0); /*输出为1*/
您可以尝试输出a-b的ascii码 希望能解决您的问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帮个忙好不
2012-11-08 · TA获得超过451个赞
知道小有建树答主
回答量:672
采纳率:0%
帮助的人:381万
展开全部
字符型和无符号整形运算都转换成整形,整形范围-32767到32768,你可以改革超过这个范围的数,结果就试试简单的加减了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
binglink
2012-11-08 · TA获得超过1101个赞
知道小有建树答主
回答量:639
采纳率:0%
帮助的人:458万
展开全部
printf("%d",a-b); a-b=-1-1=-2

printf("%d",a-b<0); -2<0结果为false, false就是0
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式