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 &将设置一个位:11
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行为是实现定义的(因此在您的实现中有效的可能会在另一个平台/编译器或其他编译器版本上被破坏).
| 归档时间: |
|
| 查看次数: |
159 次 |
| 最近记录: |