コードの一部があります:
int p(char *a, char*b)
{
while (*a | *b)
{
if (*a ^ *b)
//...
}
}
そして、私はそれが何をしているのか本当に知りません。
編集: |
and^
演算子が何をするかは理解していますが、char
値に対して何をするかはわかりません。
コードの一部があります:
int p(char *a, char*b)
{
while (*a | *b)
{
if (*a ^ *b)
//...
}
}
そして、私はそれが何をしているのか本当に知りません。
編集: |
and^
演算子が何をするかは理解していますが、char
値に対して何をするかはわかりません。
文字列 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++;
}
それらを小さな整数として扱います。| | 次に、演算子は OR を実行し、^ 演算子は整数を構成する個々のビットに対して XOR (排他的 OR) を実行します。どちらの操作も、ほとんどの文字ベースのアプリケーションでは特に有用ではありませんが、(たとえば) 通信プログラミングで char にパリティ ビットを追加するために使用できます。
|
ビットごとの OR 演算子です。^
はビットごとの XOR 演算子です。
10101010 11010101
| 01010100 ^ 11111110
========== ==========
11111110 00101011
文字をchar
表すために使用できますが、本質的に整数データ型です。2 進数を格納します (2 進デジタル コンピューターの他のすべてと同様)。
この場合、char は単に数値として解釈され、| および ^ は、それぞれビット演算子 OR および XORです。
コードの意味は次のとおりです。
while (*a != '\0' && *b != '\0')
if (*a != *b)
開発者は、ビット単位の演算子を文字で使用して賢くしたかった
それが「排他的 OR」を意味する XOR 演算子です。ビット単位で動作します。
アイテムの各ビットについて:
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0
| | = ビットごとの OR (OR を含む)
^ = ビット単位の XOR (排他的 OR)
それらはバイナリ表現として扱われます。これは通常、符号なしの 1 バイトを意味します。すべてのアーキテクチャに当てはまるわけではありません!
(*a|*b)
いずれ*a
か*b
または両方に '\0' 以外のものが含まれていることを意味します
(*a^*b)
は、2 つの文字が同一ではないことを意味します。