在 C 中,这个语句是做什么的?
*p1 ^= *p2;
p1
并且p2
是指向 char 数组的两个不同地址的 char 指针。我知道^
运算符是 XOR。
在 C 中,这个语句是做什么的?
*p1 ^= *p2;
p1
并且p2
是指向 char 数组的两个不同地址的 char 指针。我知道^
运算符是 XOR。
如果您以这种方式看待它,它可能应该更容易理解:
char c1 = *p1;
char c2 = *p2;
c1 = c1 ^ c2;
*p1 = c1;
这基本上就是您显示的代码正在做的事情。
当然,这取决于您了解排他性或实际工作方式,并且也了解指针取消引用。
这个
*p1 ^= *p2;
是具有按位异或运算符的复合赋值运算符,
它是此表达式语句的替换
*p1 = *p1 ^ *p2;
应用于变量^
时char
,只需将其视为int
.
define VALUE 11
char c = VALUE;
int i = VALUE;
因为你可以认为or的值在内存中是相同的。c
i
按位异或运算符 (^) 将其第一个操作数的每个位与其第二个操作数的相应位进行比较。如果一位为 0,另一位为 1,则相应的结果位设置为 1。否则,相应的结果位设置为 0。按位异或运算符的两个操作数都必须是整数类型。算术转换中涵盖的常用算术转换应用于操作数。