Vik*_*kas 1 c bit-manipulation
#include <stdio.h>
int main()
{
int x = 0, y = 2;
int z = ~x & y;
printf("%d\n", z);
}
Run Code Online (Sandbox Code Playgroud)
任何正文都可以告诉操作如何在内存中保存变量
让我用8位简化这个:
x 0 00000000 y 2 00000010 ~x -1 11111111 ~x & y 2 00000010
按位补码~
将补充(反转值)其操作数的每个位(1
变为0
和0
变为1
).如果它在两个操作数中,则按位与AND &
将设置一个位:1
1
lhs rhs lhs AND rhs 0 0 0 0 1 0 1 0 0 1 1 1
然后,例如,011b & 001b
将导致001b
(因为只有LSB 1
在两个操作数中).在你的情况下否定x
(这是0
)你有32位设置,1
所以结果将完全取决于y
(因为1 AND RHS = RHS
,请参见真值表中的最后两行).
重要提示:请注意,您的代码不可移植,根据ANSI C,有符号整数的按位和AND行为是实现定义的(因此在您的实现中有效的可能会在另一个平台/编译器或其他编译器版本上被破坏).