【问题标题】:unsigned long long int output not workingunsigned long long int 输出不工作
【发布时间】:2020-06-10 19:52:17
【问题描述】:

以下代码在给出大于的数字时失败 111111111111111111(19次1)。

虽然 unsigned long long int 应该最多容纳 18446744073709551615(19 个数字),但是 111111111111111111(19 乘以 1)失败

#include <stdio.h>
#include <stdlib.h>
// included for sleep test after num printf
#include <unistd.h>
#include <limits.h>
#define MAX 2000000

unsigned long long int num;


unsigned long long int main(){
    for(;;){


        char buf[MAX];
        printf("                               : %llu\n", (unsigned long long int) ULONG_MAX);
        printf("enter max number : ");
        fgets(buf, MAX, stdin);

        num = strtoull(buf,NULL,10);

        printf("num holds number : %lld\n",num);
        printf("ULONG_MAX        : %lld\n\n\n\n", (unsigned long long int) ULLONG_MAX);
    }
    return num;

}

使用 19 次 1,我得到 --

num holds number : -7335632962598440505

-- 但它仍然在 unsigned long long int...??!?!?!?!

我也不明白为什么这条线不起作用

printf("ULONG_MAX        : %lld\n\n\n\n", (unsigned long long int) ULLONG_MAX);

这个命令已经失败,输入 1 并给出 -1。(我猜是返回错误?)

感谢您的帮助

【问题讨论】:

  • 您不能使用unsigned long long 来返回main()。它总是返回int
  • %lldsigned long long,使用 %llu 表示未签名。
  • %lld 用于long long。对于unsigned long long,请使用%llu
  • 同意上面的%llu。具体来说,man 3 printf 并查找“转换说明符”。
  • 为什么要使用 200 万字符缓冲区来存储无符号长整数?比方说,100 不是绰绰有余吗?

标签: c linux gcc long-integer unsigned


【解决方案1】:

1) 节省时间,启用所有警告

2) 使用匹配说明符u

unsigned long long int num;
....
// printf("num holds number : %lld\n",num);
//                            v
printf("num holds number : %llu\n",num);

【讨论】:

    猜你喜欢
    • 2016-07-29
    • 1970-01-01
    • 2012-01-27
    • 2016-12-20
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多