C语言中 为什么 a^(b^a) = b

发布于 2022-09-13 00:45:27 字数 48 浏览 17 评论 0

C语言中 为什么 a^(b^a) = b
a^(b^a) 展开是什么样子的

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

暖伴 2022-09-20 00:45:27

不光 C,支持位运算的语言结果都会是这样(可能运算符不是这个,但结果相同)。

^ 是 XOR(异或)运算符,就是二进制逐位比较,如果某位相同、则记为 0,反之不同则记为 1。

举个简单的例子:

a = 1000 # 就4位吧,懒得打那么长
b = 1111

t1 = b ^ a = 0111 # 第1位相同,就是0;其他位都不同,结果就是1
t2 = a & t1 = 1111 # 每位都不同,结果都是1

P.S. 其实就是翻转再翻转。

自我难过 2022-09-20 00:45:27

a异或b,所有不同的位都是1。而不同的位只能是0-1和1-0导致的,那么再去异或a,0的位置因为0^1翻转为0,1的位置1^1翻转成0,正好就是b了

疧_╮線 2022-09-20 00:45:27

异或操作符
a = 5 = 101b
b = 3 = 11b

b^a = 110b
110b^a = 101b = 5

公式是这样的,利用了位的特性

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文