int main()
{
int k = 1;
cout << (~(1 << k)) << endl;
}
请尝试解释答案并建议学习位操作的最佳视频
我假设您正在专门谈论此操作
(~(1<<k))
。
我们将把它分成两个部分,从
1<<k
开始。此操作会将 1 的二进制表示形式向左移动 k
位。为简单起见,我们可以将其可视化为 8 位,但对于任何位数都是相同的。十进制数 1 用二进制表示为 00000001。因此,如果我们采用该二进制表示并将其向左移动 k=1
位,我们会将数字转换为 00000010,即十进制中的 2。
现在我们可以看看第二个组件,即
~(1<<k)
或~(2)
。 ~
运算符对输入执行按位 NOT(这也称为补码)。它将获取输入数字的二进制表示形式中的每一位,并将其“翻转”到相反的位。因此,我们的二进制表示形式 2 (000000010) 在执行按位 NOT 后将变为 11111101。 11111101 是 -3 的二进制表示,这就是为什么您在程序中看到 -3 的输出。