#include static void print_ranges(unsigned int first) { unsigned int start = 0, end = first, chars = 1, bits = 0; unsigned long long base = 0; do { unsigned long long count = (unsigned long long)(end - start + 1) << bits; printf("%2u to %2u - %u char%s, range %llu to %llu\n", start, end, chars, chars == 1 ? "" : "s", base, base + count - 1); start = end + 1; end = start + (62 - end) / 2; chars++; base += count; bits += 6; } while (end <= 63); } int main(void) { print_ranges(15); puts(""); print_ranges(31); puts(""); print_ranges(47); puts(""); print_ranges(55); return 0; }