关于计算机组成原理的一道C语言题求解

18题,需要详细过程谢谢... 18题,需要详细过程谢谢 展开
 我来答
zk375812877
2018-11-06 · TA获得超过117个赞
知道答主
回答量:10
采纳率:100%
帮助的人:4.5万
展开全部

此题主要考察了c语言的数据类型,有以下几个点你需要清楚:

  1. 在C语言中整型常量的默认数据类型是int;

  2. 当两种不同类型的数值进行比较时,编译器会先将比较符号两端的数据转化为同一类型,而转化的方式是向数据范围大的转化,比如char和int比较时,char转化为int,而int与float比较时,int转化为float。

具体到这个题目中,strlen(str1)  - strlen(str2)的数据类型是unsigned,而0是int,两者比较大小时编译器会将unsigned的符号去掉来比较大小,因此,当str1的长度小于str2的长度时结果就会出错。知道原理,改正程序就很简单了,改为:

return (int)strlen(str1)- (int)strlen(str2) > 0;

或者

return strlen(str1) > strlen(str2);

就行了,以上。

听不清啊
高粉答主

2018-11-06 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部
两个unsigned int的差,仍是一个unsigned int。所以,当strlen(str1) < strlen(str2) 时,
其差值 strlen(str1) - strlen(str2) 就会是一个负数,但是这个负数若以 unsigned int 来解读时,就会变成一个“正数”了(因为 unsigned int 只要不是0,都表示一个正数的)。
为使函数返回正确结果,只要把原 return strlen(str1) - strlen(str2) > 0; 改为 : return strlen(str1) > strlen(str2);即可。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
月光大帝2
2018-11-06 · TA获得超过239个赞
知道小有建树答主
回答量:299
采纳率:33%
帮助的人:95.1万
展开全部
strlen定义为无符号整数,当相减为负时有问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小时爱吃柚子dS
2018-11-06 · TA获得超过303个赞
知道小有建树答主
回答量:423
采纳率:0%
帮助的人:54.4万
展开全部
电脑报价系统,电脑部件的信息包括
肯定知道
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式