print_internal_uint64_t register shuffle

Run Settings
LanguageC++
Language Version
Run Command
#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; }
Editor Settings
Theme
Key bindings
Full width
Lines