0

コードの一部があります:

int p(char *a, char*b)
{
  while (*a | *b) 
  {
   if (*a ^ *b)
    //...
  }
}

そして、私はそれが何をしているのか本当に知りません。

編集: |and^演算子が何をするかは理解していますが、char値に対して何をするかはわかりません。

4

8 に答える 8

8

文字列 a または文字列 b の文字数が不足していないうちに、それらが異なるかどうかを確認します。

int p(char *a, char*b)
{
     // While both string a and string b have characters left
     // note this assumes they are both zero terminated
     // and if not the same length they have trail zeros
     while (*a|*b)  
     {
         // check to see if the character is different
         // this is done via the xor
         if (*a^*b)
              //(...)
         }

         // should increment pointers or will never exit the loop
         // a++;
         // b++;
      }
于 2009-06-15T23:29:48.653 に答える
6

それらを小さな整数として扱います。| | 次に、演算子は OR を実行し、^ 演算子は整数を構成する個々のビットに対して XOR (排他的 OR) を実行します。どちらの操作も、ほとんどの文字ベースのアプリケーションでは特に有用ではありませんが、(たとえば) 通信プログラミングで char にパリティ ビットを追加するために使用できます。

于 2009-06-15T23:30:59.163 に答える
4

|ビットごとの OR 演算子です。^はビットごとの XOR 演算子です。

    10101010      11010101  
  | 01010100    ^ 11111110
  ==========    ==========
    11111110      00101011

文字をchar表すために使用できますが、本質的に整数データ型です。2 進数を格納します (2 進デジタル コンピューターの他のすべてと同様)。

于 2009-06-15T23:30:29.790 に答える
2

この場合、char は単に数値として解釈され、| および ^ は、それぞれビット演算子 OR および XORです。

于 2009-06-15T23:30:49.087 に答える
2

コードの意味は次のとおりです。

while (*a != '\0' && *b != '\0')
   if (*a != *b)

開発者は、ビット単位の演算子を文字で使用して賢くしたかった

于 2009-06-15T23:35:44.597 に答える
0

それが「排他的 OR」を意味する XOR 演算子です。ビット単位で動作します。

アイテムの各ビ​​ットについて:

0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0

于 2009-06-15T23:30:14.250 に答える
0

| | = ビットごとの OR (OR を含む)

^ = ビット単位の XOR (排他的 OR)

于 2009-06-15T23:31:01.097 に答える
0

それらはバイナリ表現として扱われます。これは通常、符号なしの 1 バイトを意味します。すべてのアーキテクチャに当てはまるわけではありません!

(*a|*b)いずれ*a*bまたは両方に '\0' 以外のものが含まれていることを意味します

(*a^*b)は、2 つの文字が同一ではないことを意味します。

于 2009-06-15T23:33:01.687 に答える