Skip to content

Instantly share code, notes, and snippets.

@mtwilliams
Last active January 20, 2019 21:18
Show Gist options
  • Save mtwilliams/4aec2d6003af0465375da2403e83f914 to your computer and use it in GitHub Desktop.
Save mtwilliams/4aec2d6003af0465375da2403e83f914 to your computer and use it in GitHub Desktop.
#: Bits: Count @ Position High? Low? = Entry
00: 00000000: 00 @ 00 0 0 = 0x000
01: 00000001: 01 @ 00 0 1 = 0x101
02: 00000010: 01 @ 01 0 0 = 0x011
03: 00000011: 02 @ 00 0 1 = 0x102
04: 00000100: 01 @ 02 0 0 = 0x021
05: 00000101: 01 @ 00 0 1 = 0x101
06: 00000110: 02 @ 01 0 0 = 0x012
07: 00000111: 03 @ 00 0 1 = 0x103
08: 00001000: 01 @ 03 0 0 = 0x031
09: 00001001: 01 @ 00 0 1 = 0x101
0a: 00001010: 01 @ 01 0 0 = 0x011
0b: 00001011: 02 @ 00 0 1 = 0x102
0c: 00001100: 02 @ 02 0 0 = 0x022
0d: 00001101: 02 @ 02 0 0 = 0x022
0e: 00001110: 03 @ 01 0 0 = 0x013
0f: 00001111: 04 @ 00 0 1 = 0x104
10: 00010000: 01 @ 04 0 0 = 0x041
11: 00010001: 01 @ 00 0 1 = 0x101
12: 00010010: 01 @ 01 0 0 = 0x011
13: 00010011: 02 @ 00 0 1 = 0x102
14: 00010100: 01 @ 02 0 0 = 0x021
15: 00010101: 01 @ 00 0 1 = 0x101
16: 00010110: 02 @ 01 0 0 = 0x012
17: 00010111: 03 @ 00 0 1 = 0x103
18: 00011000: 02 @ 03 0 0 = 0x032
19: 00011001: 02 @ 03 0 0 = 0x032
1a: 00011010: 02 @ 03 0 0 = 0x032
1b: 00011011: 02 @ 00 0 1 = 0x102
1c: 00011100: 03 @ 02 0 0 = 0x023
1d: 00011101: 03 @ 02 0 0 = 0x023
1e: 00011110: 04 @ 01 0 0 = 0x014
1f: 00011111: 05 @ 00 0 1 = 0x105
20: 00100000: 01 @ 05 0 0 = 0x051
21: 00100001: 01 @ 00 0 1 = 0x101
22: 00100010: 01 @ 01 0 0 = 0x011
23: 00100011: 02 @ 00 0 1 = 0x102
24: 00100100: 01 @ 02 0 0 = 0x021
25: 00100101: 01 @ 00 0 1 = 0x101
26: 00100110: 02 @ 01 0 0 = 0x012
27: 00100111: 03 @ 00 0 1 = 0x103
28: 00101000: 01 @ 03 0 0 = 0x031
29: 00101001: 01 @ 00 0 1 = 0x101
2a: 00101010: 01 @ 01 0 0 = 0x011
2b: 00101011: 02 @ 00 0 1 = 0x102
2c: 00101100: 02 @ 02 0 0 = 0x022
2d: 00101101: 02 @ 02 0 0 = 0x022
2e: 00101110: 03 @ 01 0 0 = 0x013
2f: 00101111: 04 @ 00 0 1 = 0x104
30: 00110000: 02 @ 04 0 0 = 0x042
31: 00110001: 02 @ 04 0 0 = 0x042
32: 00110010: 02 @ 04 0 0 = 0x042
33: 00110011: 02 @ 00 0 1 = 0x102
34: 00110100: 02 @ 04 0 0 = 0x042
35: 00110101: 02 @ 04 0 0 = 0x042
36: 00110110: 02 @ 01 0 0 = 0x012
37: 00110111: 03 @ 00 0 1 = 0x103
38: 00111000: 03 @ 03 0 0 = 0x033
39: 00111001: 03 @ 03 0 0 = 0x033
3a: 00111010: 03 @ 03 0 0 = 0x033
3b: 00111011: 03 @ 03 0 0 = 0x033
3c: 00111100: 04 @ 02 0 0 = 0x024
3d: 00111101: 04 @ 02 0 0 = 0x024
3e: 00111110: 05 @ 01 0 0 = 0x015
3f: 00111111: 06 @ 00 0 1 = 0x106
40: 01000000: 01 @ 06 0 0 = 0x061
41: 01000001: 01 @ 00 0 1 = 0x101
42: 01000010: 01 @ 01 0 0 = 0x011
43: 01000011: 02 @ 00 0 1 = 0x102
44: 01000100: 01 @ 02 0 0 = 0x021
45: 01000101: 01 @ 00 0 1 = 0x101
46: 01000110: 02 @ 01 0 0 = 0x012
47: 01000111: 03 @ 00 0 1 = 0x103
48: 01001000: 01 @ 03 0 0 = 0x031
49: 01001001: 01 @ 00 0 1 = 0x101
4a: 01001010: 01 @ 01 0 0 = 0x011
4b: 01001011: 02 @ 00 0 1 = 0x102
4c: 01001100: 02 @ 02 0 0 = 0x022
4d: 01001101: 02 @ 02 0 0 = 0x022
4e: 01001110: 03 @ 01 0 0 = 0x013
4f: 01001111: 04 @ 00 0 1 = 0x104
50: 01010000: 01 @ 04 0 0 = 0x041
51: 01010001: 01 @ 00 0 1 = 0x101
52: 01010010: 01 @ 01 0 0 = 0x011
53: 01010011: 02 @ 00 0 1 = 0x102
54: 01010100: 01 @ 02 0 0 = 0x021
55: 01010101: 01 @ 00 0 1 = 0x101
56: 01010110: 02 @ 01 0 0 = 0x012
57: 01010111: 03 @ 00 0 1 = 0x103
58: 01011000: 02 @ 03 0 0 = 0x032
59: 01011001: 02 @ 03 0 0 = 0x032
5a: 01011010: 02 @ 03 0 0 = 0x032
5b: 01011011: 02 @ 00 0 1 = 0x102
5c: 01011100: 03 @ 02 0 0 = 0x023
5d: 01011101: 03 @ 02 0 0 = 0x023
5e: 01011110: 04 @ 01 0 0 = 0x014
5f: 01011111: 05 @ 00 0 1 = 0x105
60: 01100000: 02 @ 05 0 0 = 0x052
61: 01100001: 02 @ 05 0 0 = 0x052
62: 01100010: 02 @ 05 0 0 = 0x052
63: 01100011: 02 @ 00 0 1 = 0x102
64: 01100100: 02 @ 05 0 0 = 0x052
65: 01100101: 02 @ 05 0 0 = 0x052
66: 01100110: 02 @ 01 0 0 = 0x012
67: 01100111: 03 @ 00 0 1 = 0x103
68: 01101000: 02 @ 05 0 0 = 0x052
69: 01101001: 02 @ 05 0 0 = 0x052
6a: 01101010: 02 @ 05 0 0 = 0x052
6b: 01101011: 02 @ 00 0 1 = 0x102
6c: 01101100: 02 @ 02 0 0 = 0x022
6d: 01101101: 02 @ 02 0 0 = 0x022
6e: 01101110: 03 @ 01 0 0 = 0x013
6f: 01101111: 04 @ 00 0 1 = 0x104
70: 01110000: 03 @ 04 0 0 = 0x043
71: 01110001: 03 @ 04 0 0 = 0x043
72: 01110010: 03 @ 04 0 0 = 0x043
73: 01110011: 03 @ 04 0 0 = 0x043
74: 01110100: 03 @ 04 0 0 = 0x043
75: 01110101: 03 @ 04 0 0 = 0x043
76: 01110110: 03 @ 04 0 0 = 0x043
77: 01110111: 03 @ 00 0 1 = 0x103
78: 01111000: 04 @ 03 0 0 = 0x034
79: 01111001: 04 @ 03 0 0 = 0x034
7a: 01111010: 04 @ 03 0 0 = 0x034
7b: 01111011: 04 @ 03 0 0 = 0x034
7c: 01111100: 05 @ 02 0 0 = 0x025
7d: 01111101: 05 @ 02 0 0 = 0x025
7e: 01111110: 06 @ 01 0 0 = 0x016
7f: 01111111: 07 @ 00 0 1 = 0x107
80: 10000000: 01 @ 07 1 0 = 0x271
81: 10000001: 01 @ 00 0 1 = 0x101
82: 10000010: 01 @ 01 0 0 = 0x011
83: 10000011: 02 @ 00 0 1 = 0x102
84: 10000100: 01 @ 02 0 0 = 0x021
85: 10000101: 01 @ 00 0 1 = 0x101
86: 10000110: 02 @ 01 0 0 = 0x012
87: 10000111: 03 @ 00 0 1 = 0x103
88: 10001000: 01 @ 03 0 0 = 0x031
89: 10001001: 01 @ 00 0 1 = 0x101
8a: 10001010: 01 @ 01 0 0 = 0x011
8b: 10001011: 02 @ 00 0 1 = 0x102
8c: 10001100: 02 @ 02 0 0 = 0x022
8d: 10001101: 02 @ 02 0 0 = 0x022
8e: 10001110: 03 @ 01 0 0 = 0x013
8f: 10001111: 04 @ 00 0 1 = 0x104
90: 10010000: 01 @ 04 0 0 = 0x041
91: 10010001: 01 @ 00 0 1 = 0x101
92: 10010010: 01 @ 01 0 0 = 0x011
93: 10010011: 02 @ 00 0 1 = 0x102
94: 10010100: 01 @ 02 0 0 = 0x021
95: 10010101: 01 @ 00 0 1 = 0x101
96: 10010110: 02 @ 01 0 0 = 0x012
97: 10010111: 03 @ 00 0 1 = 0x103
98: 10011000: 02 @ 03 0 0 = 0x032
99: 10011001: 02 @ 03 0 0 = 0x032
9a: 10011010: 02 @ 03 0 0 = 0x032
9b: 10011011: 02 @ 00 0 1 = 0x102
9c: 10011100: 03 @ 02 0 0 = 0x023
9d: 10011101: 03 @ 02 0 0 = 0x023
9e: 10011110: 04 @ 01 0 0 = 0x014
9f: 10011111: 05 @ 00 0 1 = 0x105
a0: 10100000: 01 @ 05 0 0 = 0x051
a1: 10100001: 01 @ 00 0 1 = 0x101
a2: 10100010: 01 @ 01 0 0 = 0x011
a3: 10100011: 02 @ 00 0 1 = 0x102
a4: 10100100: 01 @ 02 0 0 = 0x021
a5: 10100101: 01 @ 00 0 1 = 0x101
a6: 10100110: 02 @ 01 0 0 = 0x012
a7: 10100111: 03 @ 00 0 1 = 0x103
a8: 10101000: 01 @ 03 0 0 = 0x031
a9: 10101001: 01 @ 00 0 1 = 0x101
aa: 10101010: 01 @ 01 0 0 = 0x011
ab: 10101011: 02 @ 00 0 1 = 0x102
ac: 10101100: 02 @ 02 0 0 = 0x022
ad: 10101101: 02 @ 02 0 0 = 0x022
ae: 10101110: 03 @ 01 0 0 = 0x013
af: 10101111: 04 @ 00 0 1 = 0x104
b0: 10110000: 02 @ 04 0 0 = 0x042
b1: 10110001: 02 @ 04 0 0 = 0x042
b2: 10110010: 02 @ 04 0 0 = 0x042
b3: 10110011: 02 @ 00 0 1 = 0x102
b4: 10110100: 02 @ 04 0 0 = 0x042
b5: 10110101: 02 @ 04 0 0 = 0x042
b6: 10110110: 02 @ 01 0 0 = 0x012
b7: 10110111: 03 @ 00 0 1 = 0x103
b8: 10111000: 03 @ 03 0 0 = 0x033
b9: 10111001: 03 @ 03 0 0 = 0x033
ba: 10111010: 03 @ 03 0 0 = 0x033
bb: 10111011: 03 @ 03 0 0 = 0x033
bc: 10111100: 04 @ 02 0 0 = 0x024
bd: 10111101: 04 @ 02 0 0 = 0x024
be: 10111110: 05 @ 01 0 0 = 0x015
bf: 10111111: 06 @ 00 0 1 = 0x106
c0: 11000000: 02 @ 06 1 0 = 0x262
c1: 11000001: 02 @ 06 1 0 = 0x262
c2: 11000010: 02 @ 06 1 0 = 0x262
c3: 11000011: 02 @ 00 0 1 = 0x102
c4: 11000100: 02 @ 06 1 0 = 0x262
c5: 11000101: 02 @ 06 1 0 = 0x262
c6: 11000110: 02 @ 01 0 0 = 0x012
c7: 11000111: 03 @ 00 0 1 = 0x103
c8: 11001000: 02 @ 06 1 0 = 0x262
c9: 11001001: 02 @ 06 1 0 = 0x262
ca: 11001010: 02 @ 06 1 0 = 0x262
cb: 11001011: 02 @ 00 0 1 = 0x102
cc: 11001100: 02 @ 02 0 0 = 0x022
cd: 11001101: 02 @ 02 0 0 = 0x022
ce: 11001110: 03 @ 01 0 0 = 0x013
cf: 11001111: 04 @ 00 0 1 = 0x104
d0: 11010000: 02 @ 06 1 0 = 0x262
d1: 11010001: 02 @ 06 1 0 = 0x262
d2: 11010010: 02 @ 06 1 0 = 0x262
d3: 11010011: 02 @ 00 0 1 = 0x102
d4: 11010100: 02 @ 06 1 0 = 0x262
d5: 11010101: 02 @ 06 1 0 = 0x262
d6: 11010110: 02 @ 01 0 0 = 0x012
d7: 11010111: 03 @ 00 0 1 = 0x103
d8: 11011000: 02 @ 03 0 0 = 0x032
d9: 11011001: 02 @ 03 0 0 = 0x032
da: 11011010: 02 @ 03 0 0 = 0x032
db: 11011011: 02 @ 00 0 1 = 0x102
dc: 11011100: 03 @ 02 0 0 = 0x023
dd: 11011101: 03 @ 02 0 0 = 0x023
de: 11011110: 04 @ 01 0 0 = 0x014
df: 11011111: 05 @ 00 0 1 = 0x105
e0: 11100000: 03 @ 05 1 0 = 0x253
e1: 11100001: 03 @ 05 1 0 = 0x253
e2: 11100010: 03 @ 05 1 0 = 0x253
e3: 11100011: 03 @ 05 1 0 = 0x253
e4: 11100100: 03 @ 05 1 0 = 0x253
e5: 11100101: 03 @ 05 1 0 = 0x253
e6: 11100110: 03 @ 05 1 0 = 0x253
e7: 11100111: 03 @ 00 0 1 = 0x103
e8: 11101000: 03 @ 05 1 0 = 0x253
e9: 11101001: 03 @ 05 1 0 = 0x253
ea: 11101010: 03 @ 05 1 0 = 0x253
eb: 11101011: 03 @ 05 1 0 = 0x253
ec: 11101100: 03 @ 05 1 0 = 0x253
ed: 11101101: 03 @ 05 1 0 = 0x253
ee: 11101110: 03 @ 01 0 0 = 0x013
ef: 11101111: 04 @ 00 0 1 = 0x104
f0: 11110000: 04 @ 04 1 0 = 0x244
f1: 11110001: 04 @ 04 1 0 = 0x244
f2: 11110010: 04 @ 04 1 0 = 0x244
f3: 11110011: 04 @ 04 1 0 = 0x244
f4: 11110100: 04 @ 04 1 0 = 0x244
f5: 11110101: 04 @ 04 1 0 = 0x244
f6: 11110110: 04 @ 04 1 0 = 0x244
f7: 11110111: 04 @ 04 1 0 = 0x244
f8: 11111000: 05 @ 03 1 0 = 0x235
f9: 11111001: 05 @ 03 1 0 = 0x235
fa: 11111010: 05 @ 03 1 0 = 0x235
fb: 11111011: 05 @ 03 1 0 = 0x235
fc: 11111100: 06 @ 02 1 0 = 0x226
fd: 11111101: 06 @ 02 1 0 = 0x226
fe: 11111110: 07 @ 01 1 0 = 0x217
ff: 11111111: 08 @ 00 1 1 = 0x308
#include <stdio.h>
int main(void) {
for (unsigned n = 0; n <= 0xFF; ++n) {
unsigned char r = 0;
unsigned char i = 0;
for (unsigned char v = n; v; v &= v << 1)
r += 1, i = __builtin_ffs(v) - r;
char hi = (i+r == 8);
char lo = (i == 0);
unsigned packed = 0;
packed |= (unsigned)r;
packed |= (unsigned)i << 4;
packed |= (unsigned)lo << 8;
packed |= (unsigned)hi << 9;
printf("%02x: %c%c%c%c%c%c%c%c: %02x @ %02x %c %c = 0x%03x\n", n, (n & 0x80 ? '1' : '0'),
(n & 0x40 ? '1' : '0'),
(n & 0x20 ? '1' : '0'),
(n & 0x10 ? '1' : '0'),
(n & 0x08 ? '1' : '0'),
(n & 0x04 ? '1' : '0'),
(n & 0x02 ? '1' : '0'),
(n & 0x01 ? '1' : '0'), r, i, hi ? '1' : '0', lo ? '1' : '0', packed);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment