javascript - js中的与运算是怎么算的,为什么1000&1100的结果是72而不是1000
天蓬老师
天蓬老师 2017-04-11 11:46:00
0
5
398

js中的与运算是怎么用的,我console.log(110& 111)结果就是110,是对的,但是console.log(1000&1100)结果就是72,为什么不是1000,就是换算成十进制,这个72也是不对的,不知道是怎么回事?

console.log(110& 111);输出110 console.log(1000&1100);输出72 哪位大神给解答下?
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

membalas semua (5)
PHPzhong

跟js没关系 这是位运算 基于2进制 大学学C必然讲这个

简单说

110 = 1*64 + 1*32 + 0*16 + 1*8 + 1*4 + 1*2 + 0*1 = 1101110(2) 111 = 1*64 + 1*32 + 0*16 + 1*8 + 1*4 + 1*2 + 1*1 = 1101111(2) 110 & 111 = 1101110(2) & 1101111(2) = 1101110(2) = 110 1000 = 1*512 + 1*256 + 1*128 + 1*64 + 1*32 + 1*16 + 1*8 + 0*4 + 0*2 + 0*1 = 1111111000(2) 1100 = 1*1024 + 0*512 + 0*256 + 0*128 + 1*64 + 0*32 + 0*16 + 1*8 + 1*4 + 0*2 + 0*1 = 10001001100(2) 1000 & 1100 = 1111111000(2) & 10001001100(2) = 1001000(2) = 1*64 + 1*8 = 72

&表示按位与,计算方式为先转换为2进制,然后每一个对应位置的同时为1得1,其他情况为0,得到2进制,再转为10进制。
电脑里储存数字用的是2进制,按位与是cpu最最最简单的操作之一,性能快。

    刘奇

    js中默认是10进制,如果你想使用十六进制来表示,则为0x开头

    console.log((0x1000&0x1100).toString(16)); //1000
      刘奇
      先写个32位二进制的函数: function CountBits(n) { var count = 32; var result = []; while (count--) { result.unshift(n & 1); n >>= 1; } return result.join(''); } 得出1000的二进制32位表示:00000000000000000000001111101000 1100的二进制32位表示:00000000000000000000010001001100 再看&的描述(https://developer.mozilla.org/zhCN/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators): & (按位与) 对每对比特位执行与(AND)操作。只有 a 和 b 都是 1 时,a AND b 才是 1。与操作的真值表如下: 得出1000&1100:00000000000000000000000001001000 最后:parseInt('00000000000000000000000001001000',2) //72
        刘奇

        看你的问题是希望做二进制的位运算,但你的输入却是十进制的。

        转换如下

        1. 使用parseInt(number,2)将2进制的字符串转换为数字

        2. 使用number.toString(2)方法将数字转为2进制字符串显示出来

        正确写法

        console.log(110& 111);

        console.log((parseInt("110",2)&parseInt("111",2)).toString(2));

        console.log(1000&1100);

        console.log((parseInt("1000",2)&parseInt("1110",2)).toString(2));
          迷茫

          看了上面的回答还是有小小收获的,至少让我复习了一下。不过再看楼主的问题,是问

          110& 111 结果就是 110 是对的
          1000 & 1100 结果就是72,为什么不是1000

          可以看出来,楼主是把 & 和 && 搞混了,仅此而已。

          & 是二进制的与运算,而 && 是语法中的 逻辑与 ,用混了。

            Muat turun terkini
            Lagi>
            kesan web
            Kod sumber laman web
            Bahan laman web
            Templat hujung hadapan
            Tentang kita Penafian Sitemap
            Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!