Why it gives FALSE if we compare (if (.1 == i)) where int i = .1 as initialized and similarly if we compare(if(-1 <= SIZE)) macro SIZE to -1 ??
全局 arr[] 使用 #define SIZE 计算,并在主函数内使用此值我正在使用 if 条件语句与 -1 进行比较,我的期望是 True,但条件总是检查 False。同样,我初始化了整型变量 I 值为 .1 并与 if 条件进行比较,但总是检查 False,请解释为什么?
int arr[] = {1,2,3,4,5,6,7};
#define SIZE (sizeof(arr)/sizeof(arr[0]))
int main()
{
printf("%ld\n",sizeof(SIZE));
int i = .1;
if(i == .1)
{
printf("True\n");
}
else
{
printf("False\n");
}
printf("==================================\n");
if(-1 == SIZE)
{
printf("True\n");
}
else
{
printf("False");
}
}
这里有几个隐式转换的问题:
正在初始化
i
:i
是一个 int
,因此当您尝试使用 .1
(这是一个 double
值)初始化它时,它实际上会转换为 0
(一个 int
值)。
比较
i
:i
与 if (i == .1)
进行比较时,由于 .1
是 double
,因此 i
的值也会转换为 double
来进行比较。(0.0 == 0.1)
是假的。
与
SIZE
相比:SIZE
是一个无符号值。因此,如果您使用 if(-1 <= SIZE)
,-1
的值将转换为无符号值,并成为一个非常大的正值。(<large positive value> <= SIZE)
是假的。