所以我最终会尝试优化我的代码,我正在做一堆标志检查。我试图通过简单地使用8位代表一个八边形开始简单,我将有一个8位数字,代表'用过的边'和8位数字代表'未使用的边'
非常直接,因为八角形方便地拥有8个一切:D
所以我在javascript中拥有的是
let sidesNotInUse = 0b11111111;
let sidesInUse = 0b00000000;
我希望能够编写以下功能
function inUse(sideIndex) {
// checks that the 1 flag at index is set in sidesInUse
}
function use(sideIndex) {
if(!(inUse(sideIndex))) {
// operator to set flag at index in sidesInUse to 1 and sidesNotInUse to 0
}
}
function unuse(sideIndex) {
if(inUse(sideIndex)) {
// operator to set flag at index in sidesInUse to 0 and sidesNotInUse to 1
}
}
不确定我是否错误地看着这个,但任何帮助都会有用
使用掩码,我们可以指定我们想要更改的位。
let mask = 1 << 3;
意味着我们想要从右边00000000改变位置4的位。
基于此,我们可以优化您的inUse()函数以返回特定位置的位:
function inUse(sideIndex) {
let mask = 1 << sideIndex;
if ((sidesInUse & mask) != 0) {
return true;
} else {
return false;
}
}
使用| (OR)运算符我们可以将位设置为1,而〜(NOT)和&(AND)运算符的组合使我们能够最终将位设置为0。
function use(sideIndex) {
let mask = 1 << sideIndex;
if (!(inUse(sideIndex))) {
sidesInUse |= mask;
sidesNotInUse &= ~mask;
}
}
function unuse(sideIndex) {
let mask = 1 << sideIndex;
if (inUse(sideIndex)) {
sidesInUse &= ~mask;
sidesNotInUse |= mask;
}
}
顺便说一下 - 你真的不需要两个二进制数,一个就足以知道一个侧面是否正在使用。