谁能解释一下我如何得到-3的输出

问题描述 投票:0回答:1
int main()
{ 
    int k = 1;

    cout << (~(1 << k)) << endl;
}

请尝试解释答案并建议学习位操作的最佳视频

c++ bit-manipulation bit
1个回答
0
投票

我假设您正在专门谈论此操作

(~(1<<k))

我们将把它分成两个部分,从

1<<k
开始。此操作会将 1 的二进制表示形式向左移动
k
位。为简单起见,我们可以将其可视化为 8 位,但对于任何位数都是相同的。十进制数 1 用二进制表示为 00000001。因此,如果我们采用该二进制表示并将其向左移动
k=1
位,我们会将数字转换为 00000010,即十进制中的 2。

现在我们可以看看第二个组件,即

~(1<<k)
~(2)
~
运算符对输入执行按位 NOT(这也称为补码)。它将获取输入数字的二进制表示形式中的每一位,并将其“翻转”到相反的位。因此,我们的二进制表示形式 2 (000000010) 在执行按位 NOT 后将变为 11111101。 11111101 是 -3 的二进制表示,这就是为什么您在程序中看到 -3 的输出。

© www.soinside.com 2019 - 2024. All rights reserved.