【问题标题】:Comparison of two variables两个变量的比较
【发布时间】:2012-05-03 02:20:00
【问题描述】:

我只是一个很棒的编程难题。为什么是一样的?

#include <stdio.h>
#include <limits.h>

int main(int argc, char *argv[])
{
  unsigned int x = ULONG_MAX;
  char y = -1;   
  if (x == y) printf("That is same.");  

  return 0;
}

我认为 unsigned int 被转换为signed char,因此它将是-1。它可能是比较有符号和无符号类型的标准。不知道……

【问题讨论】:

  • 这是作业吗?如果是,请使用homework 标签。
  • 这不是一个谜题,如果您知道什么是补码算法,这完全是意料之中的行为。
  • 如何才能对家庭作业投赞成票?那是非常困难的代码,为什么它会这样工作。 :-) wildplasser:也许吧。对不起,但我不以标准为导向。 ;-)
  • 顺便说一句:你不比较变量;你比较。值也有类型,部分继承自它们所源自的变量;部分由他们提交的运营商塑造。语法可能是expr == expr,但表达式也有值和类型。

标签: c


【解决方案1】:

signed charunsigned int 之间的较量中,unsigned int 获胜!

是这样的

这里-1 将转换为unsigned int,即ULONG_MAX,因此if() 条件为真。

在 C 中,大小确实很重要。变量总是转换为其中最大的大小。

【讨论】:

  • 为了完整性:因为y是一个char,它是有符号的,值被符号扩展为unsigned int,所以我们得到一个11...11——它与@完全相同987654333@.
  • 给我值 -1 和 -1。为什么?
  • @RePRO 我认为您正在使用 printf %d 打印出值。因此你会看到-1s。 %d 将该值解释为一个有符号整数,它将ULONG_MAX 转换为-1。数字表示是相同的,但解释会有所不同。 == 支持unsigned int%d 支持signed int
【解决方案2】:

多年前,我学到了一些东西。其中之一是比较相似的类型。

如果unsigned int 的值大于sizeof char,我会将char 转换为unsigned int。或者如果unsigned int 的值被限制为sizeof char,则以另一种方式进行转换。这样,您就可以告诉编译器您是如何比较这些值的,这也将有助于维护人员。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多