gpt4 book ai didi

c - 为什么我的符号测试总是报告 "negative"?

转载 作者:行者123 更新时间:2023-11-30 15:00:04 25 4
gpt4 key购买 nike

以下程序应打印数组元素的总和是正数还是负数:

#include <stdio.h>

#define ARR_SIZE 5

int main()
{
int array[ARR_SIZE] = {1,-2,3,4,-5};
unsigned sum;
int i;

for(i=0, sum=0; i < ARR_SIZE; i++)
{
sum += array[i];
printf("sum %d\n ", sum);
}


printf("%d\n",sum);
if(sum>-1) printf("non negative\n");
else printf("negative\n");
return 0;
}

程序没有做它应该做的事情;无论收到什么数组值,它都会打印“负数”。

例如,上面程序中写入的数组的总和是1,因此我期望以下输出:

sum 1
sum -1
sum 2
sum 6
sum 1
1
non negative

虽然输出是:

sum 1
sum -1
sum 2
sum 6
sum 1
1
negative

为什么我会得到这个输出?

最佳答案

在表达式 sum > -1 中,应用通常的算术转换(“平衡”)。由于一个操作数是 unsigned int,另一个操作数是 int,因此操作数 -1(即 int)会被隐式转换到无符号整数。比较操作是在unsigned int类型上进行的。

此外,无符号变量从一开始就不能保存负值,因此即使没有隐式转换,该表达式也没有任何意义。

关于c - 为什么我的符号测试总是报告 "negative"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42362568/

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