按位异或运算,同为1或同为0取0,不同取1

假设有如下代码,那么a(10)的返回结果是?

function a(a){
    a^=(1<<4)-1;
    return a;
}

A
5

B
10

C
15

D
16

正确答案:A

1<<4 左移相当于1*2^4=16

a^=16-1=15

a=a15=1015

^ 异或运算:

10的二进制00001010

15的二进制00001111

========>00000101 转成十进制:5

(按位异或运算,同为1或同为0取0,不同取1)

<< 表示左移,先化为2进制,1为01,然后左移4位,成010000,再化为10进制,10000(二进制) = 16(十进制)。

接着a = a ^15 而a = 10,符号^表示异或,也就是比较对应的二进制位是否相同,相同为0,不同为1。

10的二进制 => 1010 15的二进制 => 1111 通过异或运算可以得到 0101 再转换成十进制即是5

posted @ 2023-11-15 17:58  龙陌  阅读(146)  评论(0)    收藏  举报