C语言中的二进制表达式

时间:2019-03-03 22:48:26

标签: c binary-operators

int i = -1, j = 1, k, l;
k = !i && j;
l = !i || j;
printf("%d %d", i, j);  // prints "-1 1"

请向我解释其工作原理,以便我正确理解。

2 个答案:

答案 0 :(得分:2)

int i=-1,j=1,k,l;
k=!i&&j;
l=!i||j;
printf("%d %d",i,j);

也不 l k 被打印, i j 不变,因此对于 printf 的观点与

相同
int i=-1,j=1;
printf("%d %d",i,j);

printf("-1 1");

如果您仍然对 k l 的值感兴趣:

  • !i&&j(!i)&&j i 值为-1,所以!i的值为0(逻辑运算符为false),因此!i&&j的计算值为错误,因此 k 的值为0
  • !i||j(!i)||j i 值为-1,因此!i值为0, j 为1(对于逻辑运算符),因此!i||j等于false||true,因此 l 的值为1或任何非空值

答案 1 :(得分:0)

int i=-1,j=1,k,l;

k=!i&&j;  // The value of K is not used; the value does not matter
l=!i||j;  // The value of L is not used, the value does not matter

printf("%d %d",i,j); // i is -1, j is 1, the output is "-1 1"

输出为:

-1 1

逻辑很简单。