Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 两个变量的比较_C - Fatal编程技术网

C 两个变量的比较

C 两个变量的比较,c,C,我有一个很棒的编程难题。为什么是相同的 #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; } #包括 #包括 int main(int argc,char*argv[])

我有一个很棒的编程难题。为什么是相同的

#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;
}
#包括
#包括
int main(int argc,char*argv[])
{
无符号整数x=ULONG_MAX;
chary=-1;
如果(x==y)printf(“这是相同的”);
返回0;
}

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

有符号字符
无符号整数
之间的tiff中,
无符号整数
获胜

是这样的

此处
-1
将转换为
unsigned int
,即
ULONG_MAX
,因此
if()
条件为true


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

有符号字符
无符号整数
之间的tiff中,
无符号整数
获胜

是这样的

此处
-1
将转换为
unsigned int
,即
ULONG_MAX
,因此
if()
条件为true


在C语言中,大小很重要。变量总是转换为其中最大的一个。

多年前,我学到了一些东西。其中一种是比较型


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

多年前,我学到了一些东西。其中一种是比较型


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

这是家庭作业吗?如果是的话,请使用标签。这是一个dup,这不是一个谜题,如果你知道什么是二的补码算法,这完全是预期的行为。怎么会有人呕吐到家庭作业?这是一段非常困难的代码。为什么它会这样工作?:-)威尔德·普拉瑟:也许吧。很抱歉,我不熟悉标准艺术顺便说一句:你不比较变量;您可以比较值。值也有一些类型,部分继承自它们来源的变量;部分由提交给它们的操作符形成。语法可能是
expr==expr
,但是表达式也有值和类型。这是家庭作业吗?如果是的话,请使用标签。这是一个dup,这不是一个谜题,如果你知道什么是二的补码算法,这完全是预期的行为。怎么会有人呕吐到家庭作业?这是一段非常困难的代码。为什么它会这样工作?:-)威尔德·普拉瑟:也许吧。很抱歉,我不熟悉标准艺术顺便说一句:你不比较变量;您可以比较值。值也有一些类型,部分继承自它们来源的变量;部分由提交给它们的操作符形成。语法可能是
expr==expr
,但是表达式也有值和类型。为了完整性:因为
y
是一个
char
,它是有符号的,所以值被符号扩展到
无符号int
,所以我们得到了一个
11…11
,它精确到
ULONG_MAX
。给我值-1和-1。为什么?@RePRO我想您是在使用
printf
%d
打印值。因此您可以看到
-1
s<代码>%d将值解释为带符号整数,该整数将
ULONG_MAX
转换为
-1
。数字表示法相同,但解释不同
=
支持
无符号int
,而
%d
支持
有符号int
以确保完整性:因为
y
是一个有符号的
char
,该值被符号扩展到
无符号int
,所以我们得到了一个
11…11
,它精确到
ULONG MAX
。给我一个值-1和-1。为什么?@RePRO我想您是在使用
printf
%d
打印值。因此您可以看到
-1
s<代码>%d将值解释为带符号整数,该整数将
ULONG_MAX
转换为
-1
。数字表示法相同,但解释不同
=
支持
无符号整数
%d
支持
有符号整数