簡體   English   中英

sprintf格式說明符,用於大於UINT32的數字

[英]sprintf format specifier for numbers greater than UINT32

我正在嘗試使用sprintf將兩種uint32_t類型的總和打印到緩沖區中。 它們的總和可能大於uint32_max,因此我將結果捕獲到int64_t中。 這是我嘗試過的一個小片段:

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

int main()
{
    char tmp[100] = {0};
    int64_t num = UINT32_MAX+2;
    sprintf(tmp, "%" PRId64, num);
    printf("A: %s\n", tmp);

    return 0;
}

答案是A: 1 [gcc],表示值溢出。 預期值為4294967295 + 2 = 4294967297 先前的答案建議使用說明符PRId64但這似乎沒有幫助。 您能指出我在此摘要中的錯誤嗎?

問題不是格式,而是數學!

int64_t num = UINT32_MAX + 2;

加法的參與者都是32位值,結果也是:模2 ^ 32的結果為1

如果將LL加到常量的末尾,它將使操作數之一變為64位,因此加法也是如此。

int64_t num = UINT32_MAX + 2LL;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM