我正在尝试对充满所有 1 的缓冲区执行 AND 操作。
我正在编写以下代码,
unsigned char pTemp[1024];
memset(pTemp,0xFF,1024);
printf("AND - %d ",((unsigned char)pTemp[0] && 0x2));
我得到了答案 - 1 。
请让我知道发生了什么。提供解决方案。
我正在尝试对充满所有 1 的缓冲区执行 AND 操作。
我正在编写以下代码,
unsigned char pTemp[1024];
memset(pTemp,0xFF,1024);
printf("AND - %d ",((unsigned char)pTemp[0] && 0x2));
我得到了答案 - 1 。
请让我知道发生了什么。提供解决方案。
按位与运算符是&
,不是&&
。后者是用于组合布尔值的逻辑运算符。
&&
是逻辑运算符,&
而是位运算符,它们是不同的。
2 && 1
给出非零,并2 & 1
给出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
}
如果您必须使用大量操作或想要定义更复杂的操作,这可能会使任务更舒适。