C:对char进行I和^操作的结果是什么?

时间:2009-06-15 23:27:59

标签: c bitwise-operators

有一段代码:

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

我真的不知道它在做什么。

修改:我了解|^运算符的作用,我只是不知道它们对char值的作用。

8 个答案:

答案 0 :(得分: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++;
      }

答案 1 :(得分:6)

它将它们视为小整数。 |然后,运算符执行OR,并且^运算符对构成整数的各个位执行异或(异或)。对于大多数基于字符的应用程序来说,这两种操作都不是特别有用,但可以使用它们(例如)在通信编程中为char添加奇偶校验位。

答案 2 :(得分:4)

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

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

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

答案 3 :(得分:2)

在这种情况下,char只被解释为数字和| and ^ are the bitwise operators OR and XOR

答案 4 :(得分:2)

代码只是意味着:

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

开发人员希望巧妙地使用带有字符的按位运算符

答案 5 :(得分:0)

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

您商品中的每一位:

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

答案 6 :(得分:0)

| =按位OR(包含OR)

^ =按位异或(异或)

答案 7 :(得分:0)

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

(*a|*b)表示*a*b或两者都包含“\ 0”以外的任何内容

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