有一段代码:
int p(char *a, char*b)
{
while (*a | *b)
{
if (*a ^ *b)
//...
}
}
我真的不知道它在做什么。
修改:我了解|
和^
运算符的作用,我只是不知道它们对char
值的作用。
答案 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)
表示两个字符不相同。