【问题标题】:C Programming - XOR Bitwise OperationC 编程 - XOR 位运算
【发布时间】:2013-06-01 05:39:51
【问题描述】:

下面的“C”语句执行什么操作?

星=星^0b00100100;

(A) 切换变星的第 2 位和第 5 位。

(B) 清除变星的第 2 位和第 5 位以外的所有位。

(C) 设置除变星的第 2 位和第 5 位之外的所有位。

(D) 将变星中的值乘以 0b00100100。

我仍然对此一无所知。有人可以帮帮我吗?

【问题讨论】:

  • 脾气暴躁的回应:没有,因为那不会编译。作为标准,C 不支持二进制数的 0b 前缀。
  • 真的吗?但是这个问题出现在我过去的试卷上,所以我认为它会起作用。
  • star的原始值是多少?
  • @D3FTY 顺便说一句,如果你知道这是 XOR 运算符,你为什么不 1. 已经知道它的作用(这对于从事 CS 和东西),2.如果你不这样做,你为什么不谷歌呢?

标签: c bit-manipulation xor


【解决方案1】:

它是 (A) 切换位 2 和 5

以下是异或运算的真值表:

x  y  x^y
0  0   0
1  0   1
0  1   1
1  1   0

从表中可以看出x XOR 0 = xx XOR 1 = !x

XOR 是按位运算,因此它对单个位进行运算。因此,如果您将star 与某个常数进行异或运算,它将切换常数中的1 位。

您可以找到一些解释,例如here.

【讨论】:

  • 有什么具体的解释吗?我还是不明白。
  • @H2CO3 好吧,如果我是哑巴,我很抱歉。但是你不能指望每个人都像你一样有同样的知识水平,聪明的亚历克斯。无意冒犯。
【解决方案2】:

如果两个输入相同,XOR 运算符返回 0,否则如果两个输入不同,则返回 1。例如给定真值表:-

  • a=1 b=1 => a^b=0,
  • a=0 b=0 => a^b=0,
  • a=0 b=1 => a^b=1,
  • a=1 b=0 => a^b=1。

【讨论】:

    【解决方案3】:

    xor 是二元运算符,适用于 2 位。

    xoring 规则:相同位 ans 为 0,不同位 ans 为 1 让

    a= 1 0 1 0 1 1
    b= 0 1 1 0 1 0
    --------------
    c= 1 1 0 0 0 1
    --------------

    逐位比较a和b的位 if 同样放 0 否则放 1 xor 基本上用于在给定的重复编号集中找到唯一的。 只是异或所有没有。你会得到唯一的(如果只有一个唯一的)

    【讨论】:

      【解决方案4】:

      exclusive OR 有这个真值表:

      A   B   A^B
      -----------
      1   1   0
      1   0   1
      0   1   1
      0   0   0
      

      我们可以看到,如果Btrue (1),那么A 被翻转(切换),如果它是false (0),A 被单独留下。所以答案是(A)。

      【讨论】:

      • 答案是 C 怎么办?
      【解决方案5】:

      如果您知道 XOR 的工作原理,并且知道 ^ 在 C 中是 XOR,那么这应该很简单。你应该知道 XOR 会翻转设置为 1 的位,设置 0b00100100 的位 2 和 5,因此它会翻转这些位。

      从“测试期间”的角度来看,假设你需要向自己证明这一点,你真的不需要知道star 的初始值来回答这个问题,如果你知道^ 是如何工作的然后把任何东西扔进去:

       00100100
      ^10101010  (star's made up value)
      ---------
       10001110  (star's new value)
      
       bit position: | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0  
                     |---|---|---|---|---|---|---|---
       star's new v: | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 0
                     |---|---|---|---|---|---|---|---
       star's old v: | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0
      

      然后再次检查你的答案,做到了吗:

      (A) 切换变星的第 2 位和第 5 位。 (是)

      (B) 清除除变星的第 2 位和第 5 位之外的所有位。 (没有)

      (C) 设置除变量星的位 2 和 5 之外的所有位。 (没有)

      (D) 将变星中的值与 0b00100100 相乘。 (36x170 = 142?不)

      【讨论】:

        【解决方案6】:

        XOR 运算符(也称为“逻辑加法”)定义如下:

        a   b   a^b
        -----------
        0   0    0
        0   1    1
        1   0    1
        1   1    0
        

        所以a^0 保持a 不变,而a^1 切换它。

        对于多位值,操作是按位执行的,即在操作数的对应位之间。

        【讨论】:

          猜你喜欢
          • 2012-09-12
          • 2014-01-27
          • 1970-01-01
          • 1970-01-01
          • 2019-02-21
          • 2014-12-16
          • 2010-12-03
          • 2013-04-20
          • 2011-02-10
          相关资源
          最近更新 更多