gpt4 book ai didi

c - 数字打印为负值,但以某种方式测试为正值

转载 作者:太空宇宙 更新时间:2023-11-04 05:39:20 25 4
gpt4 key购买 nike

这可能是我遇到过的最奇怪的事情:一个同时为正数和负数的数字! (我可以向你证明这一点,因为我有输出/输入代码的链接 here at ideaone 。基本上,我的输出是一个负数,但更奇怪的是:当我检查它是否小于零时,它是错误的(?!)。更奇怪的是:当你将它乘以一个不是 1 的数字时,它会切换回打印为正数。

当我在 Xcode 上编译时不会发生此错误,但在互联网上(或使用其他一些编译器)编译时会发生,例如我的链接中的那个。

具体了解它的作用并不重要,我想知道为什么这个值同时为负和正。

#include <stdio.h>
#include <cmath>

int main()
{
unsigned long answer,T,n,N,a,d,b,L1,amount;

scanf("%ld",&T); // number of test cases to loop through
while (T--) {
scanf("%ld",&N);

amount = 0;
answer = 0;
n=N-N%2;
for (a = 1; a <= n/2; a++) {
d = N-a;
L1 = a*d;

for (b = 1; b*b < L1 ; b++) {
// "amount" is always a positive number
amount = 2*(((L1-1)/b) - b + 1) - 1;

if (d==a) answer+=amount;
else answer+=2*amount; // we are only adding positive values to this
}
}

if (answer<0) printf("This answer is less than zero %ld\n",answer);
if (answer>0) printf("This answer is greater than zero %ld\n",answer);
printf("%ld\n",answer);
printf("%ld\n",2*answer/2);
}
}

输入:

1
2500

输出:

Success  time: 0.02 memory: 3300 signal:0
This answer is greater than zero -1842629629
-1842629629
304854019

如您所见,我的否定答案大于零。更不用说,它与我在 Xcode 中编译时的答案不同,即使是正形式也是如此。

这让我很吃惊。它打印出一个“正”的负数

Proof is here at ideaone.com

最佳答案

answer 是 unsigned long。 %ld 在格式字符串中为长符号。将 %ld 更改为 %lu,您将不会在打印时将无符号值更改为有符号值,它会正确打印。

    if (answer<0) printf("This answer is less than zero %lu\n",answer);
if (answer>0) printf("This answer is greater than zero %lu\n",answer);

关于c - 数字打印为负值,但以某种方式测试为正值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23147697/

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