2014-01-17 6 views
0

Исследование возможности использования побитового сравнения для оценки того, какие опции были выбраны из возможных 100 вариантов.Поразрядное сравнение больших чисел

теперь как целое число для выбора всех параметров потребовало бы хранения целого числа от 2 до мощности 99 (6E29). путь за пределом около 9E18.

так же, как с разрешениями доступа (1 = чтение, 2 = запись, 4 = выполнение) 1 + 2 + 4 = 7 = полный доступ.

Я хотел бы знать, какой из 100 вариантов был выбран одним и тем же методом.

Любые советы/советы, которые были высоко оценены.

NB хранения будет MySQL

- EDIT -.

Конечной целью здесь является упрощение проверки относительно того, что валюты пользователь может быть оплачена в

присваивая значения валюты как так:

Currency OptVal 
GBP  1 
USD  2 
EUR  4 
AUD  8 
CAD  16 
ZAR  32 

и так далее (там много много валюты и больше будет возникать через криптографические валюты, я уверен)

тогда было бы удобно, чтобы проверить, какие валюты пользователь, используя битовые операторы ...

так что если пользователь имел настройки валюты в размере 3 только GBP и USD. 5 GBP & EUR 63 GBP, USD, EUR, AUD, CAD, ZAR

и так далее - надеюсь, что это проясняет цели.

Проблема заключается в том, чтобы сделать это в самой упрощенной форме хранения этого целого числа, когда у вас есть> 100 валют. вам нужно значение 2E (n-1) для каждой опции, а для большого n это число очень велико и не может быть сохранено в виде целого числа (максимальное значение BIGINT - 18446744073709551615)

+0

100 бит могут быть представлены 4 x 32-битными ints –

+0

, поэтому в основном число опций/32 - это число int, необходимое для представления этой опции? сравнение будет битами, установленными на любом из 4-х целых чисел? –

ответ

0

Вы хотите совет. Не делайте этого так.

MySQL предлагает тип данных boolean, что удобно для флагов. Каждое значение занимает один байт, поэтому хранилище будет больше, чем бит.

MySQL также предлагает тип данных bit(), в котором вы можете объединить до 64 бит. Вы можете прочитать о них here.

Использование встроенных типов данных - это просто правильный путь. Они защищают вас от изменений в сервере, от обновлений в ОС и от того, что ваше приложение и сервер имеют разные конечные значения (если вы не знаете, что это такое, тогда вы определенно не должны думать о бит-игре).

Хорошей новостью является то, что существуют типы данных для того, что вы хотите сделать.