C语言-习题 位运算

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;
   }
发布了37 篇原创文章 · 获赞 10 · 访问量 744

猜你喜欢

转载自blog.csdn.net/qq_43608850/article/details/104320691
今日推荐