#include <stdio.h>
#include <stdint.h>
typedef union {
// UINT64_MAX is 20 bytes.
char buffer[24];
uint64_t group[3];
} Print_Buffer;
void print_internal_uint64_t(uint64_t v) {
Print_Buffer output = {0};
size_t i = 0;
while(true) {
i += 1;
output.buffer[24 - i] = (v % 10) + '0';
v /= 10;
if(v == 0) {
break;
}
}
if(i <= 8) {
size_t shift = 8 * (8 - i);
output.group[0] = output.group[2] >> shift;
output.group[1] = 0;
output.group[2] = 0;
} else if(i <= 16) {
size_t shift = 8 * (16 - i);
output.group[0] = output.group[1] >> shift;
output.group[0] |= output.group[2] << (64 - shift);
output.group[1] = output.group[2] >> shift;
output.group[2] = 0;
} else {
size_t shift = 8 * (24 - i);
output.group[0] >>= shift;
output.group[0] |= output.group[1] << (64 - shift);
output.group[1] >>= shift;
output.group[1] |= output.group[2] << (64 - shift);
output.group[2] >>= shift;
}
printf("%s\n", output.buffer);
}
void print_n(uint64_t v) {
printf("uint64_t: ");
print_internal_uint64_t(v);
}
void print_n(int64_t v) {
printf("int64_t: ");
if(v < 0) {
printf("-");
v = -v;
}
print_internal_uint64_t(v);
}
int main() {
print_n(UINT64_MAX);
print_n(0UL);
print_n(1UL);
print_n(9UL);
print_n(50UL);
print_n(62UL);
print_n(73L);
print_n(-84L);
print_n(99999999L);
print_n(45645656L);
print_n(35123123123L);
print_n(4564565645645656L);
return 0;
}