【问题标题】:Compare and Identify the location and value at particular position and print it比较并识别特定位置的位置和值并打印
【发布时间】:2016-12-19 11:35:07
【问题描述】:

我在解决问题时卡住了,如下所示

假设我有两个变量 A=10010101 [正确位值] & B=11001010 [需要与 A 比较的错误位值]

以上两个变量都是八位的,我需要比较从最高位到最后一位的每个位置的值。我需要的是打印它们不相同的位置以及该位置的正确/错误值。

示例:对于 B,当我们与 A 的第 2 位的位值进行比较时,第 2 位的位值应为“0”。

我尝试使用 XOR 运算,但在这种情况下,我没有在该位置找到正确的值。另外我想让你知道 Bit A 的值是固定的,而 Bit B 的值是动态形成的。

感谢您宝贵的时间。

【问题讨论】:

  • 这缺少代码,这是一个非常“请为我写这个”的问题。
  • @unwind 先生,如果您可以帮助我处理逻辑,则无需编写。因为如果没有适当的逻辑,我无法自己编写代码。感谢您的评价

标签: c# c bit-manipulation binary-data


【解决方案1】:

只需比较位,如果它们不同,则打印 A 中的索引和对应位。

for(i=0 to sizeof(A))
{
    tempA = A & (1 << i); //Get ith bit of A
    tempB = B & (1 << i); //Get ith bit of B
    if(tempA != tempB ) //Check if they are same.
        printf(i, tempA); //If they are different, print position and correct value.
}

【讨论】:

  • 谢谢先生的逻辑,我会编码并给你我的反馈
  • 如果你做 A XOR B 你会得到一个整数,它只有在 A 和 B 中设置的位不同。然后你可以search for highest bit set
  • @Gerhardh:你是对的。但我只是想用一些伪代码来解释逻辑。另请注意,您需要打印发生错误的所有位,而不仅仅是最高位。
【解决方案2】:

如果我猜对了,你的逻辑应该是这样的:

ForEach elem in A 
    C[elem.index] = A XOR B

ForEach elem in C
    if elem == 1 
        print elem.index

【讨论】:

  • 谢谢先生的逻辑,我会编码并给你我的反馈
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多