-1

すべて1で満たされたバッファでAND演算を実行しようとしています.
以下のコードを書いています.

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

私は答えを得ています - 1 。

何が起こっているのか教えてください。ソリューションを提供します。

4

3 に答える 3

8

ビットごとの AND 演算子は&, ではありません&&。後者は、ブール値を結合するために使用される論理演算子です。

于 2012-09-25T09:13:02.323 に答える
3

&&は論理演算子ですが、&はビット単位の演算子ですが、それらは異なります。

2 && 1は非ゼロを与え、 を2 & 1与え0ます。

私はあなたが&ここにいると信じています。

于 2012-09-25T09:13:45.560 に答える
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

}

これにより、多くの操作を使用する必要がある場合、またはもう少し複雑な操作を定義する場合に、タスクがより快適になる可能性があります。

于 2012-09-25T10:09:04.210 に答える