論理反転とビット毎の補数の違い - Community Translated (JA)

Version 2

    Community Translated by  MoTa_728816          Version : **

     

     

    質問:

    論理反転とビット毎の補数の違いは何でしょうか?

     

    回答:

    論理反転は‘!’で表現され、ビット毎の補数は‘~’で表現されます。論理反転はバイト全体の値を評価します。もしその値が 0 でなければ、論理反転の結果は 0 となります。一方、ビット毎の補数はバイトに含まれる各ビットの補数となります。論理反転とビット毎の補数は全くことなる処理です。例として下記のコードをご覧ください:

     

    void main(void)

    {

        BYTE A = 0x01;

        BYTE B = 0x02;

     

        // 2つのLEDを初期化します

        LED_1_Start();

        LED_2_Start();

     

        // すべてのLEDを消灯します

     

         LED_1_Off();

         LED_1_Off();

     

        // Aの値は 0 ではないので、Aの論理反転は 0 となります。

     

        // 条件式の評価は (0x00 & 0x02) = 0x00 となり、LED_1 OFF となります。

     

        if (!A & B)

              LED_1_On() ;

     

        // 0x01 のビット毎の補数は 0xFE となります。

     

        // 条件式の評価は (0xFE & 0x02) = 0x02 となり、LED_2 ON となります。

     

         if (~A & B)

              LED_2_On();

    }