取出给定 16 位二进制数的奇数位

169 阅读1分钟

1 题目

功能:取出给定 16 位二进制数的奇数位 描述:取出给定的 16 位二进制数的奇数位,计算后打印出来

2 思路

本例的解题关键在于如何将给定的 16 位二进制数的奇数位取出。首先定义个可以借助的中间变量 m,为其赋值,使箕成为最高位是1、其余 15 位为 0 的 16 位进制数

将给定的数 a 的值左移一位,让其原来值的第 15 位成为最高位,将 a 和 m 进行与运算进行判断,若运算结果是 1, 则将此位取出转换为对应的十进制数:若运算结果是 0, 则将 a 的值左移两位,使其原来值的第 13 位成为最高位,再进行判断,直到将 8 位奇数位全部取出

3 代码

#include <stdio.h> 
#include <stdlib.h>/**
功能:取出给定 16 位二进制数的奇数位
描述:取出给定的 16 位二进制数的奇数位,计算后打印出来
**/int main(int argc, char const *argv[]) {
​
    unsigned short a,s=0,q;
    int i,j,n=7,m;
  printf("请输入一个八进制数:\n");
    scanf("%ho", &a);               // 输入一个八进制数
    m=1<<15;                    // m 的最高位为 1,其他位为 0
  a<<=1;                      // 左移一位,使第15位成为最高位
  for(i=1;i<=8;i++) {               // 得到 8 位数
    
    q=1;
    if(m & a) {                 // 如果本位上值为1则进行计算
      
      for(j=1;j<=n;j++)
        q*=2;               // 得到权值
      s+=q;                 // 累加
    }
    a<<=2;                    // 向左移位
    n--;  
  }
    printf("结果是:%o\n", s);            // 将结果输出
}

示例结果:

$ gcc ex082.c -o demo
$ ./demo
​
请输入一个八进制数:
013
结果是:1