【问题标题】:Different Outputs for a positive and negative value正负值的不同输出
【发布时间】:2012-10-08 13:32:01
【问题描述】:

考虑下面的代码:

#include<stdio.h>
int array[]={1,2,3,4,5,6,7,8};
#define SIZE (sizeof(array)/sizeof(int))

int main()
{
        printf("%d",SIZE);
        if(-1<=SIZE) printf("1");
        else printf("2");
        return 0;
}

我得到 82 作为输出,但是如果我将 if(-1&lt;=SIZE) 替换为 if(0&lt;=SIZE)if(1&lt;=SIZE) 表示 if 子句中的 -1 为 0 或非负数,那么我得到 81 作为输出。为什么我得到不同的输出?

【问题讨论】:

    标签: c if-statement c-preprocessor


    【解决方案1】:

    sizeof 运算符返回一个size_t,它是一个无符号 整数类型。当您将-1 转换为无符号整数时,您会得到一个非常大的数字。

    在构建时打开更多警告,编译器会警告您比较有符号和无符号数据类型。

    【讨论】:

    • 不应该比较强制双方为签名类型吗?我虽然这是默认设置。
    • Thanx Joachim,这真的让我很生气。
    • @Dan:这是混合无符号和有符号的the陷阱——这就是为什么许多人建议在你要进行算术运算时始终使用有符号整数的原因它们并将无符号限制为位操作(参见例如soundsoftware.ac.uk/c-pitfall-unsigned
    猜你喜欢
    • 2019-12-28
    • 1970-01-01
    • 2019-05-18
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 2019-04-20
    • 1970-01-01
    相关资源
    最近更新 更多