无符号数相减得到的是无符号还是有符号?

最近看了有个题目,写一个函数用来判断一个字符串是否比另一个大,前提是要用到字符串库函数strlen,它给出个答案
  1. int strlonger(char *s, char* t)
  2. {
  3.   return strlen(s) - strlen(t) < 0;
  4. }
这个答案在某种情况下会出错,并且解释为什么会出错怎么修改。
提示说strlen返回的是unsigned类型,我当时第一反应是如何s字符串长度比t的小,那么两个无符号的数相减是一个有符号的负数呢,还是一个无符号的数,如果是有符号那就没有问题,无符号当然就会有问题了,为了解决疑惑,做了以下实验:
1.  s = "abc", t = "abcd", strlonger返回值为1;
2.  在1的条件下,修改return语句,(unsigned)( strlen ( s )   -  strlen ( t ))   <  0, strlonger返回值为0;
3.  在1的 条件下,修改return语句, strlen ( s )   -  strlen ( t )   <  0u, strlonger返回值为0;
由此可推断两个无符号相减是有符号的,那么本题到底有哪里有问题呢?那就是无符号值的表达范围Max_int比有符号大,再xian

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29444108/viewspace-1140422/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29444108/viewspace-1140422/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值