何时在javascript中使用>> [重复]
Posted
技术标签:
【中文标题】何时在javascript中使用>> [重复]【英文标题】:When to use >> in javascript [duplicate] 【发布时间】:2014-04-23 06:55:58 【问题描述】:我今天正在做 70-480 论文,我遇到了一个问题,>>
只是想知道这意味着什么。
什么时候用,怎么用之类的东西
【问题讨论】:
发布你看到它的使用方式。 这是bitwise operator 如果您正在参加旨在证明您对该主题的熟悉程度的认证考试,您可能希望在考试期间熟悉the javascript language spec。像你这样的问题在那里有权威的答案。 【参考方案1】:>>
是Sign-propagating right shift。
将二进制表示中的 a b (
例子:
9 (base 10): 00000000000000000000000000001001 (base 2) --------------------------------
9 >> 2(以 10 为底):00000000000000000000000000000010(以 2 为底)= 2(以 10 为底)
【讨论】:
哈哈,谢谢指出! :-))【参考方案2】:我可以说这是一个移位运算符。至于何时使用它,它是用于当您需要在位级别修改值时,例如假设您需要将 1 更改为 4,您可以使用 1
【讨论】:
【参考方案3】:>>
是一个右位移位。无论您指定多少位置,它都会将值中的所有位向右移动。
我们来看一个例子:
取数字 9。在二进制中,这是1001
。如果我们将 9 向右移动一位,我们最终会得到100
(后面的 1 被移掉了),即 4。
所以(9 >> 1)
等于 4。
如果我们移动两个位置,我们最终得到 10
,即 2。所以 (9 >> 2)
是 2。
这些运算符通常在创建标志值时使用。假设您正在开发一个视频游戏。角色可以奔跑、跳跃和射击。我们可以将它们定义为 flags:
var IN_RUN = (1 << 0);
var IN_JUMP = (1 << 1);
var IN_SHOOT = (1 << 2);
请注意,这里我们使用<<
而不是>>
。相同的想法,但它向左移动。
这个表达式等价于:
var IN_RUN = 1;
var IN_JUMP = 2;
var IN_SHOOT = 4;
不过,使用移位更容易,尤其是当您开始使用更高的值时。
我们可以使用|
运算符组合标志。如果我们想指定某人正在奔跑和射击,我们将使用IN_RUN|IN_SHOOT
。这基本上将这些值加在一起(从技术上讲,它将值组合在一个二进制级别,如果它们在 either 值中是 1
,则将位设置为 1
。所以 IN_RUN|IN_SHOOT
等于 5。
然后您可以使用&
运算符检查值是否具有特定标志(注意只有一个)。如果该标志在值中,myValue & IN_RUN
将返回 IN_RUN
。
TL;DR:二进制运算符通常用于在二进制级别将多个布尔值存储在单个值中。
【讨论】:
【参考方案4】:>>
是正确的位移运算符。你可以这样使用它:
var x = 50; // Binary 00110010
var y = x >> 3; // Decimal 6, 00000110
您可以看到 x 的二进制值向右移动了 3 位。您也可以使用<<
进行左移。
我想不出它有什么实际用途。但你可以将它用于位域,就像这样
var MY_BOOLEAN_SETTING = 1 << 0; // 1, 00000001
var MY_OTHER_BOOLEAN_SETTING = 1 << 1; // 2, 00000010
var MY_THIRD_BOOLEAN_SETTING = 1 << 2; // 4, 00000100
var bitfield = MY_BOOLEAN_SETTING | MY_THIRD_BOOLEAN_SETTING; // 0000 0101
if(bitfield & MY_OTHER_BOOLEAN_SETTING) //checks if 0010 is in the bitfield (its not)
//some code
if(bitfield & MY_BOOLEAN_SETTING) //checks if 0001 is in the bitfield (it is)
//some more code
【讨论】:
以上是关于何时在javascript中使用>> [重复]的主要内容,如果未能解决你的问题,请参考以下文章
检测 <td> 的内部 html 何时随 javascript 或 jquery 更改