按位异或运算,同为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


__EOF__

本文作者龙陌
本文链接https://www.cnblogs.com/longmo666/p/17834441.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   龙陌  阅读(86)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示