ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 无符号数相减得到的是无符号还是有符号?

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

原创 Linux操作系统 作者:wzhang741 时间:2014-04-11 20:30:14 0 删除 编辑
最近看了有个题目,写一个函数用来判断一个字符串是否比另一个大,前提是要用到字符串库函数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博客 ” ,链接:https://blog.itpub.net/29444108/viewspace-1140422/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: mpi+python环境搭建
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2014-01-15

  • 博文量
    2
  • 访问量
    28927