printbit

来源:互联网 发布:canon mp280清零软件 编辑:程序博客网 时间:2024/06/17 07:30

#include limits.h
#include stdlib.h
#include stdio.h

void PRINTBIT(unsigned int number) /* PRINTBIT用于把一无符号整数翻译成二进制串 */
{
  unsigned int i;
  unsigned int bits = sizeof(int) * CHAR_BIT; /* bits中存放执行环境中int类型对象所占字位数 */
  unsigned int checker = 1; /* checker用于指示由右至左的位数,初置设为1 */
  checker <<= bits - 1; /* 将checker中非零位移到其机器表示的最左边,这样做是为了移植性 */
  for(i=1;i<=bits;i++) /* 从左至右打印各位,每四位之间留一空隔 */
  {
    putchar((number & checker) ? '1' : '0'); /* 打印checker非零位所对应的number中对应位 */
    if(i%4 == 0)
      putchar(' '); /* 每四位之间打印一空隔 */
    checker >>= 1; /* 准备打印number中下一位 */
  }
  putchar('/n');
}

int main(int argc, char* argv[])
{
  int n1, n2;
  if(argc != 3)
  {
    printf("Usage: example int1 int2");
    exit(EXIT_FAILURE);
  }
  n1 = atoi(argv[1]);
  n2 = atoi(argv[2]);
  printf("bit patterns for %d and %d:/n", n1, n2);
  PRINTBIT(n1);
  PRINTBIT(n2);
  printf("~%d:/n", n1);
  PRINTBIT(~n1);
  printf("~%d:/n", n2);
  PRINTBIT(~n2);
  printf("%d & %d:/n", n1, n2);
  PRINTBIT(n1 & n2);
  printf("%d ^ %d:/n", n1, n2);
  PRINTBIT(n1 ^ n2);
  printf("%d | %d:/n", n1, n2);
  PRINTBIT(n1 | n2);
  return(EXIT_SUCCESS);
}

转载自《ANSI C 标准讲解》。