c - 如何比较两个整数中未对齐的单个位?

标签 c comparison bit

为了将 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;
}

但这并不是“更好”。

关于c - 如何比较两个整数中未对齐的单个位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27011127/

相关文章:

c# - bluemix vm openstack 使用c++语言

c - 产生和处理软件中断

javascript - jQuery 功能到 YUI 3 的映射?

javascript - 比较 jQuery 中对象的 InnerHTML

c - 在非标准位置构建 gcc-4.3.4 时遇到问题

c - 创建一个 for 循环来编辑数据结构中的列表

python - 如何在python中比较字符串和整数?

c - 为平均值排序浮点值

java - 如何将位组合成一个 long 来创建一个唯一的 ID?

c++ - 从文件中收集位数据