求一个js的二进制问题

发布于 2022-09-12 22:54:23 字数 220 浏览 16 评论 0

需求:

0 -> 进行一个操作 -> 1
1 -> 进行一个操作 -> 2
2 -> 进行一个操作 -> 1

例如

let a = 0
a ^= a+1 // 1
a ^= a+1 // 3
a ^= a+1 // 1

使用按位异或就能满足 第一种 和 第三种的表现,但是第二种就不行

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

来日方长 2022-09-19 22:54:23
// 如果要用位操作,先抹去第 2 位(就是把 2 变成 0)再加 1 
function func1(n) {
    return (n & 0x01) + 1;
}

// 其实看规律跟奇偶有关,所以
function func2(n) {
    return n % 2 + 1;
}

[0, 1, 2].forEach(n => console.log(n, "->", func1(n), func2(n)));

// 0 -> 1 1
// 1 -> 2 2
// 2 -> 1 1
煮酒 2022-09-19 22:54:23

来个纯位运算版本:

const p = t => ((t & 1) << 1) | ((t ^ 1) & 1);

if/else语法是非常优雅的,代码不以句短为荣,只以难懂为耻(没错,难懂说的就是我这种写法)。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文