(a ^ (1 << b)) 在像 C++ 这样的语言中实际上做了啥?

Posted

技术标签:

【中文标题】(a ^ (1 << b)) 在像 C++ 这样的语言中实际上做了啥?【英文标题】:What does (a ^ (1 << b)) actually do, in a language like C++?(a ^ (1 << b)) 在像 C++ 这样的语言中实际上做了什么? 【发布时间】:2015-11-19 03:06:03 【问题描述】:

我在看这个函数,

int func(int a, int b)
    return (a ^ (1 << b)); 

实际发生了什么?我知道它基本上是在说“a XOR (2^b)”,即 a xor 2 的 b 次方。但除此之外,实际发生了什么,为什么?我想我正在这个公式中寻找某种模式。

【问题讨论】:

如果你问的是关于 c++ 的问题,为什么要包含 java 标签?为什么不编写其余代码并使用调试器运行程序,这样您就可以看到发生了什么? 因为这只是基本的位操作,它适用于 Java、C 等。而且我已经尝试了一些测试,但我看不到其中的模式。 你是什么意思,“除此之外实际发生了什么?”?它计算 xor 2 的 b 次方……仅此而已。我知道a + (b / 5) 计算 a 添加到 b 除以 5,但除此之外实际发生了什么以及为什么? 考虑到这一点,1 【参考方案1】:

这个特殊的表达式切换 a 的第 b 位。

这可能很有用,例如,如果您想将 int 视为布尔数组(或位掩码),并否定位置 b 处的条目。

【讨论】:

我猜是一个后续问题,为什么这会有用? ...对于天才的一些定义..正如您所说,这确实是“基本的位操作”。 是的,但是您实际上很快就掌握了正在发生的事情。我做了一个 for 循环并以二进制和以 10 为基数打印了结果,我盯着它看了一会儿,看不到什么在盯着我看。但这必须有真正的用途。有什么想法吗? FWIW,@SomeSortofGuy,在 C++ 中更简单的方法是std::bitset,你可以去someBitset.flip(b);

以上是关于(a ^ (1 << b)) 在像 C++ 这样的语言中实际上做了啥?的主要内容,如果未能解决你的问题,请参考以下文章

洛谷 P1464 Function

Function(Function(F...

Luogu P1464 Function

洛谷 P1464 Function

排序不等式

用c语言求解 输出1-50以内的所有勾股数