2009-06-15 23 views
0

有一段代码:C:char和char操作的结果是什么?

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

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

编辑:我知道|^运营商做什么,我只是不知道他们将如何处理char值。

回答

6

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

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++; 
     } 
+0

确定,但什么是*一个确切的结果| * B?对两个表示字符的二进制数字只做一个按位操作? – agnieszka 2009-06-15 23:31:26

+0

当然,希望复制的代码中有一些++的缺失。 – 2009-06-15 23:32:16

+0

@angieszka:是的,确实如此。 – 2009-06-15 23:34:13

0

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

在你的产品的每个位:

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

4

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

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

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

0

| =按位OR(inclusie OR)

^=位异或(异或)

0

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

(*a|*b)意味着要么*a*b或两者包含别的比“\ 0”

(*a^*b)意味着,两个字符不相同。

2

的代码只是表示:

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

开发人员要加以巧妙利用位运算符与字符