TS 请教个语法问题

这个判断是什么意思,尤其是<<表示什么??

将 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.

4赞

这个问题感觉和ts好像没多大联系。。

这么写判断的都是大佬。

只要你眼里都是2进制,你的判断也都会这样