すべて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 。
何が起こっているのか教えてください。ソリューションを提供します。
ビットごとの AND 演算子は&
, ではありません&&
。後者は、ブール値を結合するために使用される論理演算子です。
&&
は論理演算子ですが、&
はビット単位の演算子ですが、それらは異なります。
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
}
これにより、多くの操作を使用する必要がある場合、またはもう少し複雑な操作を定義する場合に、タスクがより快適になる可能性があります。