何时在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);

请注意,这里我们使用&lt;&lt; 而不是&gt;&gt;。相同的想法,但它向左移动。

这个表达式等价于:

var IN_RUN = 1;
var IN_JUMP = 2;
var IN_SHOOT = 4;

不过,使用移位更容易,尤其是当您开始使用更高的值时。

我们可以使用| 运算符组合标志。如果我们想指定某人正在奔跑和射击,我们将使用IN_RUN|IN_SHOOT。这基本上将这些值加在一起(从技术上讲,它将值组合在一个二进制级别,如果它们在 either 值中是 1,则将位设置为 1。所以 IN_RUN|IN_SHOOT 等于 5。

然后您可以使用&amp; 运算符检查值是否具有特定标志(注意只有一个)。如果该标志在值中,myValue &amp; IN_RUN 将返回 IN_RUN

TL;DR:二进制运算符通常用于在二进制级别将多个布尔值存储在单个值中。

【讨论】:

【参考方案4】:

&gt;&gt; 是正确的位移运算符。你可以这样使用它:

var x = 50; // Binary 00110010
var y = x >> 3; // Decimal 6, 00000110

您可以看到 x 的二进制值向右移动了 3 位。您也可以使用&lt;&lt; 进行左移。

我想不出它有什么实际用途。但你可以将它用于位域,就像这样

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 更改

javascript中何时要用引号,何时不需要用引号,引号起啥作用?

何时在 Rails 视图中使用 @ 以及何时使用符号?

javascript函数中的()和有啥区别? [复制]

Java中,位运算符>>,右移时左边何时补0,何时补1

何时在 Laravel Horizo​​n 中使用多个主管