C 如何比较两个INT中未对齐的单位?

C 如何比较两个INT中未对齐的单位?,c,comparison,bit,C,Comparison,Bit,为了比较foo中的m-第位与bar中的n-第位,我最后做了如下操作 if ( ( ( foo >> m ) & 1 ) == ( ( bar >> n ) & 1 ) ) {...} 甚至 if ( ! ( ( ( foo >> m ) ^ ( bar >> n ) ) & 1 ) ) {...} 但这在我看来是非常不理想的。我想知道是否有一种更直接的方法来做这件事。对我来说,一种更具可读性的方法是 #include &

为了比较
foo
中的
m
-第位与
bar
中的
n
-第位,我最后做了如下操作

if ( ( ( foo >> m ) & 1 ) == ( ( bar >> n ) & 1 ) ) {...}
甚至

if ( ! ( ( ( foo >> m ) ^ ( bar >> n ) ) & 1 ) ) {...}

但这在我看来是非常不理想的。我想知道是否有一种更直接的方法来做这件事。

对我来说,一种更具可读性的方法是

#include <stdio.h>

int main() {
  int foo, bar;
  int foo_bit, bar_bit;
  int foo_mask, bar_mask;

  foo = 60;  // 0b00111100
  bar = 240; // 0b11110000

  foo_bit = 3;
  bar_bit = 5;

  foo_mask = 1 << foo_bit;
  bar_mask = 1 << bar_bit;

  if((foo & foo_mask)>0 == (bar & bar_mask)>0) {
    printf("bit %d in foo and bit %d in bar are equal\n",foo_bit,bar_bit);
  } else {
    printf("bit %d in foo and bit %d in bar are NOT equal\n",foo_bit,bar_bit);
  }

  return 0;
}
#包括
int main(){
int foo,bar;
int foo_位、bar_位;
int foo_掩码、bar_掩码;
foo=60;//0b00111100
bar=240;//0b11110000
foo_位=3;
bar_位=5;
foo_mask=1(0){
printf(“foo中的位%d和bar中的位%d相等”\n“,foo\u位,bar\u位);
}否则{
printf(“foo中的位%d和bar中的位%d不相等,\n”,foo\u位,bar\u位);
}
返回0;
}

但是它不是“更好的”

什么
foo
和什么
bar
?还有,你想得到什么,是低还是高,或者它们是否相等?我在你发布的代码片段中没有看到任何
foo
bar
。m和n在编译时会被知道吗?还有,为什么你认为它们是次优的,你需要它做什么?
(foo&foo\u mask)和&(bar&bar\u mask)
将测试两个位是否都设置了(都是1),而不是两个位是否相等(都是1或都是0)。@Dmitri:谢谢,我将
和&
替换为
=
。这只是一种输入错误:)顺便说一下,如果foo_位和bar_位不相等,这段代码可能无法正常工作。在您的情况下,
foo&foo\u mask
将返回
0b100
,而
bar&bar\u mask
将返回
0b10000
(这与前者不同)。@NiBZ您完全正确。我还没有充分考虑我最后的评论,我将尽快修复它。@NiBZ:现在它应该可以工作了。我对
>0
的两个结果进行测试,因此,如果两个位都未设置,或者如果两个位都已设置,则条件为真,则不使用mather wihch位。