uint64_t выдаёт результат как int32_t
Пробегаюсь по циклу и никак не могу понять как это получается?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <limits.h>
#include <stdint.h>
#define DEBUG 1
#define NUMSYMBOLS 24
#define BUFLEN (NUMSYMBOLS * 8)
int loop(uint64_t numb)
{
debugprint("numb", numb, 0);
uint64_t res = 0;
for (uint64_t i = 0; i < numb; i++)
{
res += i;
// debugprint("res", res, i % 1000000);
}
unsigned long long big = 1844674407370955161;
debugprint("big", big, 0);
debugprint("ULLONG_MAX", ULLONG_MAX, 0);
debugprint("res", res, 0);
return res;
};
void debugprint(char *name, unsigned long long res, int go)
{
if (DEBUG == 0 || go != 0)
return;
char buf[BUFLEN];
memset(buf, 0, BUFLEN);
sprintf(buf, "%d", res);
printf("\n%s\nbits:\t%d\n", name, sizeof(res) * 8);
printf("val:\t%s\n", buf);
};
void main()
{
loop(5000000);
};
Вывод программы:
numb
bits: 64
val: 5000000
big
bits: 64
val: -1717986919
ULLONG_MAX
bits: 64
val: -1
res
bits: 64
val: 1642668640
Почему значения не unsigned long long???
PS D:\GitHub\loop_speed> gcc -dumpmachine
x86_64-w64-mingw32
Источник: Stack Overflow на русском