what *p1 ^= *p2; does in c

做~自己de王妃 提交于 2021-02-05 12:15:15

问题


In C what does this statement do?

*p1 ^= *p2;

p1 and p2 are char pointers pointing to two different address of a char array. I know about ^ operator is XOR.


回答1:


It should probably be easier to understand if you see it this way instead:

char c1 = *p1;
char c2 = *p2;

c1 = c1 ^ c2;

*p1 = c1;

That's basically what the code you show is doing.

This of course relies on you knowing how exclusive or actually works, and know about pointer dereferencing too.




回答2:


This

*p1 ^= *p2;

is the compound assignment operator with the bitwise exclusive OR operator,

It is a substitution for this expression statement

*p1 = *p1 ^ *p2;



回答3:


When apply ^ on char variable, just regard it as int.

define VALUE 11
char c = VALUE;
int i = VALUE;

Cause you can think that the value of c or i are same in memory.




回答4:


The bitwise exclusive OR operator (^) compares each bit of its first operand to the corresponding bit of its second operand. If one bit is 0 and the other bit is 1, the corresponding result bit is set to 1. Otherwise, the corresponding result bit is set to 0. Both operands to the bitwise exclusive OR operator must be of integral types. The usual arithmetic conversions covered in Arithmetic Conversions are applied to the operands.



来源:https://stackoverflow.com/questions/46746735/what-p1-p2-does-in-c

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!