gpt4 book ai didi

c - 为什么命令行参数 -12345678969 被认为是 >1?

转载 作者:行者123 更新时间:2023-11-30 20:45:44 24 4
gpt4 key购买 nike

这是检查给定数字是否为阿姆斯特朗数的程序

#include<stdio.h>
#include<stdlib.h>
#include<limits.h>

int main(int argc, char *argv[])
{
int num,n,sum=0;
num=atoi(argv[1]);
if(argc==2 && num>0 && num<=INT_MAX)
{ n=num;
while(num>0)
{
sum+=(num%10)*(num%10)*(num%10);
num/=10;
}
if(sum==n)
printf("%d is an armstrong number",n);
else
printf("%d is not an armstrong number",n);
return 0;
}
else
return 1;
}

在这里我给出了一个输入

-12345678969

预期输出

命令以非零状态 1 退出

但它显示

539222919 不是阿姆斯特朗号码

最佳答案

数字“-12345678969”对于 int 来说需要太多位。大多数 C 编译器中的 int 是 32-bits wide ,但这不足以包含“-12345678969”。

atoi() 只是尝试将数字转换为 32 位整数,这意味着输入值“-12345678969”的一部分被截断;在基数 2(二进制)表示中,输入数字将适合 64 位整数,如下所示:

1111111111111111111111111111110100100000001000111110001110000111

atoi()截掉高位32位时,保留低位32位:

00100000001000111110001110000111

不再包含符号(从左侧第一个读取的位是 0,这意味着没有符号,因此在有符号 int 中该数字不是负数)。

该数字以十进制表示形式将等于 539222919,这是您在案例中看到的数字。

关于c - 为什么命令行参数 -12345678969 被认为是 >1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48842620/

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