c语言 - 按位,不适用于无符号长整型



我在使用"按位和">(&(尝试更改x:

#include <stdio.h>
int main (void){
unsigned long x = 0;
printf("x = %lun", x);
x &= 1;
printf("x = %lun", x);
return 0;
}

我编译并执行代码以获得输出:

x = 0
x = 0

但我预料到了:

x = 0
x = 1

为什么?

您的意思似乎是可以用于设置位的逐位包含OR运算符

x |= 1;
printf("x = %lun", x);

或者你可以使用另一个按位运算符:可用于切换位的按位异或运算符

x ^= 1;
printf("x = %lun", x);

否则0 & 1将给出0,因为最初x是由0初始化的

unsigned long x = 0;

这是一个演示程序

#include <stdio.h>
int main( void )
{
unsigned long x = 0;
printf( "x = %lun", x );
x |= 1;
printf( "x = %lun", x );
x = 0;
x ^= 1;
printf( "x = %lun", x );
}

程序输出为

x = 0
x = 1
x = 1

最新更新