Я ищу маленькие, быстрое (в обоих направлениях) биективное отображение между следующим списком целых чисел и подмножеством диапазона 0-127:Эффективного отображения для конкретного конечных целого набора
0x200C, 0x200D, 0x200E, 0x200F,
0x2013, 0x2014, 0x2015, 0x2017,
0x2018, 0x2019, 0x201A, 0x201C,
0x201D, 0x201E, 0x2020, 0x2021,
0x2022, 0x2026, 0x2030, 0x2039,
0x203A, 0x20AA, 0x20AB, 0x20AC,
0x20AF, 0x2116, 0x2122
Одно очевидное решение:
y = x>>2 & 0x40 | x & 0x3f;
x = 0x2000 | y<<2 & 0x100 | y & 0x3f;
Edit: я пропускал некоторые ценности, в частности 0x20Ax, которые не работают с вышесказанным.
Еще одно очевидное решение - это таблица поиска, но без необходимости делать ее излишне большой, таблица поиска потребует некоторой перестановки бит в любом случае, и я подозреваю, что вся задача может быть лучше выполнена с простой перестановкой бит.
Для любознательных, эти магические числа являются единственными «большими» кодами Unicode, которые отображаются в устаревших ISO-8859 и кодовых страницах Windows.
http://en.wikipedia.org/wiki/Quine%E2%80%93McCluskey_algorithm –
Кстати, биективный отображение на подмножестве называется инъективны;) – Christoph