IT教程 ·

二进制妙用之轮回计数

一个很实用的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行代码手撸一个静态文档生成器[译]

参与评论