【问题标题】:what *p1 ^= *p2; does in c什么 *p1 ^= *p2;在c中做
【发布时间】:2018-03-26 13:59:16
【问题描述】:

在 C 语言中,这个语句是做什么的?

*p1 ^= *p2;

p1p2 是指向 char 数组的两个不同地址的 char 指针。我知道^ 运算符是异或。

【问题讨论】:

  • 如果您知道^,那么您就知道该语句的作用。
  • 对两者指向的数据进行异或运算,并将结果存储到p1指向的地址中。
  • ^ 是异或运算符。 a ^= b 是 a = a ^ b 的缩写。
  • ^= 是单个运算符。您可能更熟悉它的模拟,+=。该语句的效果直接来自其中涉及的运算符*^= 的行为,如果需要,您当然可以自行查找。
  • *p1 = *p1 ^ *p2。 “p1 的值设置为 p1 的值与 p2 的值异或。”在 char 指针都指向 2 的情况下,它会将 p1 的值更改为 0。(因为 a ^ a = 0)

标签: c compound-assignment


【解决方案1】:

如果你这样看应该更容易理解:

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

c1 = c1 ^ c2;

*p1 = c1;

这基本上就是您显示的代码正在做的事情。

这当然取决于您了解 exclusive or 的实际工作原理,并且也了解指针取消引用。

【讨论】:

    【解决方案2】:

    这个

    *p1 ^= *p2;
    

    是按位异或运算符的复合赋值运算符,

    这是对这个表达式语句的替换

    *p1 = *p1 ^ *p2;
    

    【讨论】:

      【解决方案3】:

      char 变量上应用^ 时,将其视为int

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

      因为你可以认为ci在内存中是相同的。

      【讨论】:

        【解决方案4】:

        按位异或运算符 (^) 将其第一个操作数的每个位与其第二个操作数的相应位进行比较。如果一位为 0,另一位为 1,则相应的结果位设置为 1。否则,相应的结果位设置为 0。 按位异或运算符的两个操作数都必须是整数类型。算术转换中介绍的常用算术转换应用于操作数。

        【讨论】:

          猜你喜欢
          • 2015-03-01
          • 2013-09-26
          • 1970-01-01
          • 2015-05-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-29
          • 1970-01-01
          相关资源
          最近更新 更多