1. (20分) 从一个16位的单元中取出某几位
题目描述
从一个16位的单元中取出某几位(即该几位保留原值,其余位为0. 使用value存放该16位的数,n1为欲取出的起始位,n2为欲取出的结束位。(注意:是从左到右取)
输入描述
输入3个数:value,n1,n2
value为八进制数
n1、n2为十进制数,n1与n2之间英文逗号间隔
输出描述
以8进制形式输出取出的从n1~n2这几位的值
冒号为英文冒号
输入样例
173253
5,8
输出样例
result:6
用户代码
#include <stdio.h>
unsigned short int getbits(unsigned short value, int n1, int n2);
int main()
{
unsigned short int a;
int n1, n2;
scanf("%ho\n", &a);
scanf("%d,%d", &n1, &n2);
printf("result:%ho\n", getbits(a,n1,n2));
system("pause");
return 0;
}
unsigned short int getbits(unsigned short value, int n1, int n2)
{
unsigned short int z;
z = ~0;
z = (z >> n1)& (z << (16 - n2));
z = value & z;
z = z >> (16 - n2);
return z;
}
2. (20分) 判断一个数是否是2的幂
题目描述
输入一个数,判断这个数是否是2的幂。
输入描述
以十进制形式输入一个整数
输出描述
判断这个数是否是2的幂
输入样例
256
234
输出样例
256是2的幂
234不是2的幂
用户代码
#include<stdio.h>
#include<stdlib.h>
int main()
{
int num;
scanf("%d", &num);
if (num & (num - 1) || num == 1||num==0)
printf("%d不是2的幂\n", num);
else
printf("%d是2的幂\n", num);
return 0;
}
int log2(int value)
{
int a = 0;
while (value > 1)
{
value >>= 1;
a++;
}
return 0;
}
3. (20分) 取二进制数的奇数位
题目描述
编程实现,对一个16位的二进制数取出它的奇数位(16位分别是:1~16位,奇数位即从左边起第1,3,5,…15位)。
输入描述
输入一个八进制a
输出描述
用8进制形式输出取出的奇数位
输入样例
145432
输出样例
result:263
用户代码
#include <stdio.h>
#include<stdlib.h>
int main()
{
int a;
int re =0;
int i;
int t;
scanf("%o", &a);
for (i = 0; i <8; i++)
{
t = 1<< (2*i+1);
re = re + ((a&t )>> (i + 1));
}
printf("result:%o\n", re);
return 0;
}