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