为什么以下按位运算会返回意外结果?

del*_*ber 2 c

3位最多可容纳7(4 + 2 + 1).我正在尝试使用按位运算来计算它.

3 is 0b011 
~3 is 0b100
Run Code Online (Sandbox Code Playgroud)

做一个按位或我希望0b111(即7).相反,我得到了

int result = (~3) | 3;
printf("%i\n", result);
Run Code Online (Sandbox Code Playgroud)

-1

我究竟做错了什么?

das*_*ght 6

你做的一切都是正确的:N | ~N产生一个二进制表示的数字,包括所有的数字.这样的数字被解释为-1二进制补码负数表示.