(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++ 这样的语言中实际上做了啥?的主要内容,如果未能解决你的问题,请参考以下文章