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
支持有符号整数