AND操作的错误答案

时间:2012-09-25 09:08:29

标签: c

我正在尝试对缓冲区执行AND操作,该缓冲区填充所有1.
我正在编写以下代码,

unsigned char pTemp[1024];
 memset(pTemp,0xFF,1024);
printf("AND - %d ",((unsigned char)pTemp[0] && 0x2));

我得到答案 - 1。

请让我知道发生了什么。提供解决方案。

3 个答案:

答案 0 :(得分:8)

按位AND运算符为&,而不是&&。后者是用于组合布尔值的逻辑运算符。

答案 1 :(得分:3)

&&是逻辑运算符,而&是按位运算符,它们是不同的。

2 && 1给出非零,2 & 1给出0

我相信你想要&

答案 2 :(得分:0)

&是逻辑运算符,如果你对这种操作感到不舒服,你可以更好地记住它。如果你必须经常使用它,还有更多。见下一个例子:

#define AND(x,y) (x) & (y)             //definition of custom operation.
#include <string.h>
#include <stdio.h>

void main(){

    unsigned char pTemp[1024];

    memset(pTemp,0xFF,1024);
    printf("and:%d", AND(pTemp[0], 0x2));      //AND(x,y) returns the operation

}

如果您必须使用大量操作或想要定义更复杂的操作,这可能会使任务更加舒适。