有一段代码:C:char和char操作的结果是什么?
int p(char *a, char*b)
{
while (*a | *b)
{
if (*a^*b)
//...
}
}
,我真的不知道它在做什么。
编辑:我知道|
和^
运营商做什么,我只是不知道他们将如何处理char
值。
有一段代码:C:char和char操作的结果是什么?
int p(char *a, char*b)
{
while (*a | *b)
{
if (*a^*b)
//...
}
}
,我真的不知道它在做什么。
编辑:我知道|
和^
运营商做什么,我只是不知道他们将如何处理char
值。
它将它们视为小整数。 |运算符然后执行一个或运算符并且^运算符在构成整数的各个位上执行XOR(异或)。这两种操作都不适用于大多数基于字符的应用程序,但它们可以用于(例如)在通信编程中将奇偶校验位添加到字符中。
虽然字符串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++;
}
这就是XOR运算符,意思是“异或”。它按位运行。
在你的产品的每个位:
0^0 = 0
0^1 = 1
1^0 = 1
1^1 = 0
|
是按位或运营商。 ^
是按位XOR运算符:
10101010 11010101
| 01010100 ^11111110
========== ==========
11111110 00101011
虽然char
可以用来表示字符,这是固有的整数数据类型。它存储一个二进制数字(就像二进制数字计算机中的所有其他数据一样)。
在这种情况下,char被分别解释为数字和| and^are the bitwise operators OR and XOR。
| =按位OR(inclusie OR)
^=位异或(异或)
它们将被视为二进制表示。这通常意味着无符号的1个字节。不适用于所有架构!
(*a|*b)
意味着要么*a
或*b
或两者包含别的比“\ 0”
(*a^*b)
意味着,两个字符不相同。
的代码只是表示:
while (*a != '\0' && *b != '\0')
if (*a != *b)
开发人员要加以巧妙利用位运算符与字符
确定,但什么是*一个确切的结果| * B?对两个表示字符的二进制数字只做一个按位操作? – agnieszka 2009-06-15 23:31:26
当然,希望复制的代码中有一些++的缺失。 – 2009-06-15 23:32:16
@angieszka:是的,确实如此。 – 2009-06-15 23:34:13