二进制妙用之轮回计数
一个很实用的css技巧简析
1. 什么是轮回计数
从0到n之间轮回顺次取数,假定 n=3,那末我须要的以下数据 0,1,2,3,0,1,2...;征象就如许,我也不知道轮回计数这个名词是不是适宜.权且,就以为适宜吧.
2. 通例完成
这点需求,置信关于一切的coder都小菜一碟.我们兴奋的写下以下代码
// author: herbert 464884492
// 民众号: 小院不小
for(let i=0;i<=3;i++){
console.log(i);
if(i==3){
i=-1;// 一次for轮回后,先实行++,在推断前提
}
// do something
// jump for
}
3. 二进制完成
置信许多朋侪,关于这么简朴的需求.应当能够一口气完成好多个.权且就一打吧.固然,我们本日的重点并非议论总共有多啊少种完成体式格局,这里的重点是二进制.好吧,那用二进制改怎样完成呢?
// author: herbert 464884492
// 民众号: 小院不小
let i=0;
while(true){
console.log(i++&0x3); // ++运算符优先级 17 逻辑与 16
// do something
// jump while
}
以上代码中,++先实行,再实行逻辑与.不清楚优先级的朋侪,括号最好照样加上.,我这里将其复制过来,一切优先级次序以下
优先级 | 运算范例 | 关联性 | 运算符 |
---|---|---|---|
20 | 圆括号 | n/a(不相关) | (...) |
19 | 成员接见 | 从左到右 | ... . ... |
19 | 须要盘算的成员接见 | 从左到右 | ... [ ... ] |
19 | new(带参数列表) | n/a | new ...( ... ) |
19 | 函数挪用 | 从左到右 | ... ( ... ) |
19 | 可选链(Optional chanining) | 从左到右 | ?. |
18 | new(无参数列表) | 从右到左 | new ... |
17 | 后置递增 | n/a | ...++ |
17 | 后置递减 | n/a | ...-- |
16 | 逻辑非 | 从右到左 | ! ... |
16 | 按位非 | 从右到左 | ~ ... |
16 | 一元加法 | 从右到左 | + ... |
16 | 一元减法 | 从右到左 | - ... |
16 | 前置递增 | 从右到左 | ++ ... |
16 | 前置递减 | 从右到左 | -- ... |
16 | typeof | 从右到左 | typeof ... |
16 | void | 从右到左 | void ... |
16 | delete | 从右到左 | delete ... |
16 | await | 从右到左 | await ... |
15 | 幂 | 从右到左 | ... ** ... |
14 | 乘法 | 从左到右 | ... * ... |
14 | 除法 | 从左到右 | ... / ... |
14 | 取模 | 从左到右 | ... % ... |
13 | 加法 | 从左到右 | ... + ... |
13 | 减法 | 从左到右 | ... - ... |
12 | 按位左移 | 从左到右 | ...<<... |
12 | 按位右移 | 从左到右 | ...>>... |
12 | 无标记右移 | 从左到右 | ...>>>... |
11 | 小于 | 从左到右 | ...<... |
11 | 小于即是 | 从左到右 | ...<=... |
11 | 大于 | 从左到右 | ...>... |
11 | 大于即是 | 从左到右 | ...>=... |
11 | in | 从左到右 | ... in ... |
11 | instanceof | 从左到右 | ... instanceof ... |
10 | 等号 | 从左到右 | ...==... |
10 | 非等号 | 从左到右 | ...!=... |
10 | 全等号 | 从左到右 | ...===... |
10 | 非全等号 | 从左到右 | ...!==... |
9 | 按位与 | 从左到右 | ...&... |
8 | 按位异或 | 从左到右 | ...^... |
7 | 按位或 | 从左到右 | ... | ... |
6 | 逻辑与 | 从左到右 | ... && ... |
5 | 逻辑或 | 从左到右 | ... || ... |
4 | 前提运算符 | 从右到左 | ... ? ... : ... |
3 | 赋值 | 从右到左 | ...=... ...+=... ...-=... ...*=... .../=... ...%=... ...<<=... ...>>=... ...>>>=... ...&=... ...^=... ...|=... |
2 | yield | 从右到左 | yield ... |
2 | yield* | 从右到左 | yield* ... |
1 | 睁开运算符 | n/a | ...... |
0 | 逗号 | 从左到右 | ...,.. |
4. 完成道理
智慧的你,一定能发明.二进制完成彷佛有破绽,如果我要0到4呢,经由过程上边的算法,获得效果满是0或4.所以这个和上篇一样一样有一个确权操纵.这个权值必需满足二进制位全为1,所以能完成轮回计数,有以下规律
2^0^=1
2^1^+2^0^=3
2^2^+2^1^+2^0^=7
2^3^+2^2^+2^1^+2^0^=15
....
如许计数的道理,重要应用二进制与运算特征以及位运算溢出完成置0操纵.一切这个不仅有权值的局限性,还和操纵系统位数有关联.所以,要运用这类要领,照样依据当前营业详细斟酌是不是可行.
5. 总结
学问虽小,重在积聚.2020注定是不寻常的一年.加油!!
迎接感兴趣的朋侪关注我的定阅号“小院不小”,或点击下方二维码关注。我将多年开发中碰到的难点,以及一些有意思的功用,体味都邑逐一宣布到我的定阅号中
40行代码手撸一个静态文档生成器[译]