ex05-10-1
実行結果
0001
0010
0100
0011
-----
0011
書き込みパーミッション:Yes
実行パーミッション:No
0011
0001
0011
読み書き可
ソース
// #@@range_begin(list1)
function formatBinary(x) {
const y = x.toString(2); // 2進表記にする
return ("0000" + y).substr(-4); // 右から4桁だけ取る
}
const FLAG_READ = 1;
const FLAG_WRITE = 2;
const FLAG_EXECUTE = 4;
console.log(formatBinary(FLAG_READ)); // 0001
console.log(formatBinary(FLAG_WRITE)); // 0010
console.log(formatBinary(FLAG_EXECUTE)); // 0100
console.log(formatBinary(FLAG_READ | FLAG_WRITE)); // 0011
// #@@range_end(list1)
console.log("-----");
// #@@range_begin(list2)
let p = FLAG_READ | FLAG_WRITE;
console.log(formatBinary(p)); // 0011 (右から2つのビットがオン)
let hasWrite = p & FLAG_WRITE ? "Yes" : "No";
console.log(`書き込みパーミッション:${hasWrite}`); // 書き込みパーミッション:Yes
let hasExecute = p & FLAG_EXECUTE ? "Yes" : "No";
console.log(`実行パーミッション:${hasExecute}`); // 実行パーミッション:No
console.log(formatBinary(p)); // 0011
p = p ^ FLAG_WRITE; // (XORで書き込みフラグ[右から2ビット目]を反転する[オフになる])
console.log(formatBinary(p)); // 0001
p = p ^ FLAG_WRITE; // (書き込みフラグをオンに戻す)
console.log(formatBinary(p)); // 0011
/* 複数のフラグをひとつの式で指定することも可能 */
const hasReadAndWrite = p & (FLAG_READ | FLAG_WRITE) ? "可" : "不可";
console.log(`読み書き${hasReadAndWrite}`); // 読み書き可
// #@@range_end(list2)