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(异或),对组成整数的各个位。对于大多数基于字符的应用程序来说,这两种操作都不是特别有用,但它们可以用于(例如)在通信编程中将奇偶校验位添加到 char 中。

于 2009-06-15T23:30:59.163 回答
4

|是按位或运算符。^是按位 XOR 运算符:

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

虽然char可用于表示字符,但它本质上是整数数据类型。它存储一个二进制数(就像二进制数字计算机中的所有其他内容一样)。

于 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

那是 XOR 运算符,意思是“异或”。它按位运行。

对于您项目中的每一位:

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

于 2009-06-15T23:30:14.250 回答
0

| = 按位或(包括 OR)

^ = 按位异或(异或)

于 2009-06-15T23:31:01.097 回答
0

它们将被视为二进制表示。这通常意味着无符号的 1 个字节。并非所有架构都如此!

(*a|*b)表示其中一个*a*b两个都包含除 '\0' 以外的任何内容

(*a^*b)表示这两个字符不相同。

于 2009-06-15T23:33:01.687 回答