В некоторых местах вы увидите опции, сохраненные в виде чисел. Например, при настройке прав доступа к файлам вы передаете их, используя значение в диапазоне от 0 до 7 для каждой группы пользователей.
Каждый из битов в двоичном представлении числа представляет одно из трех разрешений: чтение, запись и выполнение, поэтому значение 7 с двоичным представлением 111 означает, что файл может быть красным, записываться и выполняться, тогда как значение 5 означает, что файл может быть только красным и выполняться из-за двоичного представления 101.
примечание: я не эксперт в области того, как операционные системы управляют файлами, моё объяснение может быть неверным, но я уверен, что основная идея двоичных чисел, представляющих эти параметры, реализована там.
Что мне сейчас интересно, если эффективно хранить опции true / false в двоичном формате, используя javascript. Для этого я бы создал javascript следующим образом:
function OptionsGenerator(){
//this method takes a number, and returns an array of options.
this.num2options = function(num){
var str,len,opts=[];
if(typeof num !== "number") return false;
str = num.toString(2);
len = str.length;
for(var i=0;i<len;i++){
opts[i] = (str.charAt(i)==="1") ? true : false;
}
return opts;
}
//this function gets an array of options, and returns a number.
this.options2num = function(opts){
var str = "",o,opt;
for(o in options){
opt = (options[o]) ? 1 : 0;
str+=opt;
}
return parseInt(str,2);
}
//this function returns a specific option with an index ranging from 1 to the number of options set. takes 2 arguments: the first one is the set of options. This can either be a number or a string containing a binary representation of the number, the second parameter contains the index of the option.
this.getOption = function(num,optnum){
var str;
if(typeof num === 'number')
str = num.toString(2);
else
str = num;
return (num.charAt(optnum-1)==="1");
}
}
У меня вопрос: это эффективный способ сохранения опций, и если это так, есть ли более эффективный способ преобразования двоичного числа в число и получения определенной опции или всех опций?