[英]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.