javascript - 如何从位运算符(1 << X)生成的数字中获取 X(数字)
问题描述
可以说我有这样的设置
var num = 1 << 9 //equals 512
//OR
num = 1 << 6 //equals 64
//OR
num = 1 << 6 ^ 1 << 9 //equals 576
//OR
num = 1 << 6 ^ 1 << 9 ^ 1 << 1 ^ 1 << 8 //equals 834
我正在尝试取一个数字,比如说834
并通过一个函数来反转它并获取当我做出左移值时产生的所有数字,在这种情况下834
,产生它的数字是 6、9、1 , 和 8。
或者,我想获取变量num
并获取所有 X 值1 << X ^ 1 << X
并将其转换为数组。
所以
var values = [0,1,2,3,6,7,8,9,10,12,14,16,17] //this can occur as X in 1 << X
function bitNumberToArray(bitNumber) {
var arr = [];
// what do I put here?
return arr;
}
console.log(bitNumberToArray(834))
//returns [1, 6, 8, 9] *ORDER DOESN'T MATTER*
如果您对我在做什么感到好奇,我会获取一个用户,然后获取他们的标志(只是一个数字)并将其转换为用户友好的东西,比如This user is staff, holds badge X
Discord
我不知道从哪里开始,朝着正确的方向轻推会有所帮助。
解决方案
您需要将您的数字转换为二进制,然后像这样收集所有正位的位置:
function bitNumberToArray(n) {
const bits = [...n.toString(2)].map(Number);
return bits.reduce((result, bit, index) => result.concat(bit ? bits.length - index - 1 : []), []);
}
测试:
const test = bitNumberToArray(834);
// returns [9, 8, 6, 1]
推荐阅读
- db2 - DB2 encrypt field in select statement
- python-3.x - 无法在 Python3.6 上安装 pandas=0.18.1
- html - 解析通过 html 发送的 xml 对象时出错
- python - 为什么以下 python 代码不起作用?
- java - 重构现有的类逻辑
- python - 需要帮助理解 Django 身份验证代码
- python-3.x - 合成为 MP4 时 png 周围的moviepy黑色边框
- java - Schemes Swagger 下拉菜单中不存在 HTTP
- ubuntu - WSL2 (Ubuntu 20.04) 上的 Miniconda 失败并出现 CondaHTTPError: HTTP 000 CONNECTION FAILED
- python - Having a connection issue with cx_oracle on a Flask app