为什么C中的一个printf()不能同时打印两个64位值?[英] Why can one printf() in C not print two 64-bit values at the same time?

本文是小编为大家收集整理的关于为什么C中的一个printf()不能同时打印两个64位值?的处理方法,想解了为什么C中的一个printf()不能同时打印两个64位值?的问题怎么解决?为什么C中的一个printf()不能同时打印两个64位值?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我正在处理32位系统.当我尝试在单个printf中打印多个64位值时,它不能再打印任何进一步的(即2nd,3rd,...)变量值.

示例:

uint64_t a = 0x12345678;
uint64_t b = 0x87654321;
uint64_t c = 0x11111111;

printf("a is %llx & b is %llx & c is %llx",a,b,c);

为什么此printf不打印所有值?

我正在修改我的问题

printf("a is %x & b is %llx & c is %llx",a,b,c);

通过这样做是:A IS IS 12345678&B IS 876543210000000000&C IS 1111111100000000

如果我不正确地打印A的值,那么为什么其他人的值是Gona更改?

?

推荐答案

您需要使用正确的格式:

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

int main(void)
{
    uint64_t a = 0x12345678;
    uint64_t b = 0x87654321;
    uint64_t c = 0x11111111;

    printf("a is %#" PRIx64
            " & b is %#" PRIx64
            " & c is %#" PRIx64 "\n",
            a, b, c);
    return EXIT_SUCCESS;
}

输出:

a is 0x12345678 & b is 0x87654321 & c is 0x11111111

其他推荐答案

您应该使用<inttypes.h>

中定义的宏
printf("a is %"PRIx64" & b is %"PRIx64" & c is %"PRIx64"\n",a,b,c);

这很丑陋,但它是可移植的.这是在C99中引入的,因此您需要一个符合C99的编译器.

其他推荐答案

它在我的计算机上全部打印它们,但是有三个编译时间警告,因为%llx期望A long long unsigned int.

您确定需要使用64位类型吗?您的三个六角形都只有32位.也许您只能使用32位,然后做:

unsigned int a = 0x12345678;
unsigned int b = 0x87654321;
unsigned int c = 0x11111111;

printf("a is %x & b is %x & c is %x",a,b,c);

(或使用相当于32位无符号int的stdint)

除非您需要它们是64位,以便以后可以向它们添加更多位.

本文地址:https://www.itbaoku.cn/post/359101.html