有一段代码:
int p(char *a, char*b)
{
while (*a | *b)
{
if (*a ^ *b)
//...
}
}
我真的不知道它在做什么。
编辑:我了解|
and^
运算符的作用,我只是不知道它们将如何处理char
值。
有一段代码:
int p(char *a, char*b)
{
while (*a | *b)
{
if (*a ^ *b)
//...
}
}
我真的不知道它在做什么。
编辑:我了解|
and^
运算符的作用,我只是不知道它们将如何处理char
值。
当字符串 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++;
}
它将它们视为小整数。该| 运算符然后执行 OR 并且 ^ 运算符执行 XOR(异或),对组成整数的各个位。对于大多数基于字符的应用程序来说,这两种操作都不是特别有用,但它们可以用于(例如)在通信编程中将奇偶校验位添加到 char 中。
|
是按位或运算符。^
是按位 XOR 运算符:
10101010 11010101
| 01010100 ^ 11111110
========== ==========
11111110 00101011
虽然char
可用于表示字符,但它本质上是整数数据类型。它存储一个二进制数(就像二进制数字计算机中的所有其他内容一样)。
在这种情况下, char 只是被解释为一个数字和| 和 ^ 分别是按位运算符 OR 和 XOR。
代码只是意味着:
while (*a != '\0' && *b != '\0')
if (*a != *b)
开发人员希望聪明地使用带有字符的位运算符
那是 XOR 运算符,意思是“异或”。它按位运行。
对于您项目中的每一位:
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0
| = 按位或(包括 OR)
^ = 按位异或(异或)
它们将被视为二进制表示。这通常意味着无符号的 1 个字节。并非所有架构都如此!
(*a|*b)
表示其中一个*a
或*b
两个都包含除 '\0' 以外的任何内容
(*a^*b)
表示这两个字符不相同。