这个判断是什么意思,尤其是<<表示什么??
将 1 的每个bit向左移动 state 个bits,空余的位数以0填满。
1 << state左移一位,和乘2差不多
百度搜一下位运算
逻辑左移,可以简单理解为右边补0
state是几右边就补几个0,结果是二进制数
简单理解
比如这个类有三个标志, 分别是标志A,B,C, 每个变量有两个状态, true或false
那当这三个标志都为true时, 就是true true true , 我们用1和0表示true和false, 用一个数组按照ABC的顺序来表示是 [ 1,1,1 ], 这代表A B C 三个状态都是true, [ 1, 0, 1 ] 则是A和C是true, 但是B是false
但是也可以用一个十进制数字 7 来表示ABC都为true的情况, 因为十进制7的二进制111, 用5来表示 A和C是true, B是false的情况, 因为十进制的5是二进制的 101
假如this._flag 用来保存 十进制的数字5, 这样当我想知道这个类的A标志是否是true, 则可以通过这个isState来判断 传入一个state=2, 此时 (this._flag & (1 << state)) 就是 5 & (1 << 2), 而<< 是左移符号, 1 << 2 就等于二进制的1左移两位变成二进制的 100, 就是10进制的4, 就是 5 & 4
而 & 也是位运算, 当两个二进制数同位数都为1时才为1, 5&4 在二进制里就是 101 & 100
101
& 100
--------
100
结果是二进制100, 十进制的4 != 0,返回true, 就可以知道A标志是true
同理判断B标志则传一个state =1 , 就变成 101 & 010
101
& 010
--------
000
则判断000 != 0 返回一个false, 表示B标志为false.
这个问题感觉和ts好像没多大联系。。
这么写判断的都是大佬。
只要你眼里都是2进制,你的判断也都会这样