【问题标题】:What mathmetics behind the expression console.log(1&3); [duplicate]表达式 console.log(1&3); 背后的数学原理是什么? [复制]
【发布时间】:2014-08-13 20:00:15
【问题描述】:

我目前正在使用 angularjs,并且有这段代码。我不明白它返回什么?

    authorize: function(accessLevel, role) {
        if(role === undefined) {
            role = Session.role;
        }
        return accessLevel.bitMask & role.bitMask;
    },

一些测试

        console.log(1&2);     //0
        console.log(3&7);     //3
        console.log(5&11);    //1
        console.log(0.5&11);  //0

有人知道吗?

编辑:很抱歉,这个问题已经被问到了。但是由于我不知道按位关键字,或者在我的预搜索中找不到与以前的主题关键字匹配的任何匹配项,所以我在这里申请答案!

【问题讨论】:

标签: javascript angularjs


【解决方案1】:

简单地说,& 是一个bit-wise AND 操作。 return 表达式正在检查role 中的位是否与accessLevel 中的位“jive”(即该角色是否被授权?)。

要添加一些细节,让我们看一下这一行:

console.log(3&7);     //3

在位域中,我们有:

3: 00000011
7: 00000111
===========
&: 00000011 = 3

AND 对两个字节的逐位运算的结果是通过 AND-ing 基于这些规则的每个位列得出的:

0 & 0 => 0
0 & 1 => 0
1 & 0 => 0
1 & 1 => 1

如果您将每个0 视为false 并将每个1 视为true,那么这很有意义。有关更多信息,请参阅Truth tables 上的维基百科文章。

【讨论】:

    【解决方案2】:

    在每个位位置返回一个 1 对应的位 两个操作数都是一。

    https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators

    【讨论】:

      猜你喜欢
      • 2020-02-15
      • 2019-01-04
      • 1970-01-01
      • 2012-05-04
      • 2021-02-15
      • 1970-01-01
      • 1970-01-01
      • 2021-09-21
      • 2012-08-23
      相关资源
      最近更新 更多