gpt4 book ai didi

javascript - 第一次尝试使用按位运算符进行标志检查

转载 作者:行者123 更新时间:2023-12-02 23:59:49 32 4
gpt4 key购买 nike

所以我最终要尝试优化我的代码,我正在做一堆标志检查。我试图简单地开始,简单地使用 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;

表示我们要更改右边第4位的位00000000。

基于此,我们可以改进您的 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;
}
}

顺便说一句 - 您实际上并不需要两个二进制数,一个二进制数就足以知道一侧是否正在使用。

关于javascript - 第一次尝试使用按位运算符进行标志检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55225705/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com