因此,我最终将尝试在进行一堆标志检查的地方优化我的代码。.我试图通过简单地使用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
}
}
不确定我是否看错了,但是任何帮助都会有用
答案 0 :(得分:1)
使用掩码,我们可以指定要更改的位。
let mask = 1 << 3;
表示我们要从右边的0000 0 000处更改位置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;
}
}
顺便说一句-您实际上并不需要两个二进制数字,一个数字就足以知道是否正在使用一边。