为什么如果我们比较 (if (.1 == i)) where int i = .1 初始化时它会给出 FALSE,同样如果我们比较(if(-1 <= SIZE)) macro SIZE to -1?

问题描述 投票:0回答:1

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");
    } 
 } 
c integer
1个回答
0
投票

这里有几个隐式转换的问题:

  1. 正在初始化

    i
    :
    i
    是一个
    int
    ,因此当您尝试使用
    .1
    (这是一个
    double
    值)初始化它时,它实际上会转换为
    0
    (一个
    int
    值)。

  2. 比较

    i

    当将
    i
    if (i == .1)
    进行比较时,由于
    .1
    double
    ,因此
    i
    的值也会转换为
    double
    来进行比较。
    所以
    (0.0 == 0.1)
    是假的。

  3. SIZE
    相比:
    SIZE
    是一个无符号值。因此,如果您使用
    if(-1 <= SIZE)
    -1
    的值将转换为无符号值,并成为一个非常大的正值。
    所以
    (<large positive value> <= SIZE)
    是假的。

© www.soinside.com 2019 - 2024. All rights reserved.