gpt4 book ai didi

c - 为什么 sizeof 类型与整数比较返回 false

转载 作者:行者123 更新时间:2023-11-30 16:08:17 26 4
gpt4 key购买 nike

我在下面的代码中注意到一个奇怪的行为。

#include<stdio.h>
#include <stdbool.h>

int main()
{
int x = sizeof(int) > -1;

bool z = sizeof(int);

printf("x is %d \t z is %d \n",x,z);
if(sizeof(int)>-1)
{
printf("true\n");
}
else
printf("false\n");
}

sizeof(int) > -1 为 true 且预期输出应为 1 时,为什么 int x 为零。

最佳答案

GCC 编译器警告说:

prog.c: In function 'main':
prog.c:6:21: warning: comparison of integer expressions of different signedness: 'long unsigned int' and 'int' [-Wsign-compare]
int x = sizeof(int) > -1;
^
prog.c:11:15: warning: comparison of integer expressions of different signedness: 'long unsigned int' and 'int' [-Wsign-compare]
if(sizeof(int)>-1)

因此,您正在比较signed intunsigned long int。当 -1 转换为 unsigned long int 时,结果是最大可能的 unsigned long int 值(与 ULONG_MAX 相同) >)。

C $6.3.1.3,第 2 段:

Otherwise, if the new type is unsigned, the value is converted by repeatedly adding or subtracting one more than the maximum value that can be represented in the new type until the value is in the range of the new type.

有关更多信息,请阅读 cppreference .

关于c - 为什么 sizeof 类型与整数比较返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59399590/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com