熟练运用位操作符

1.写一个函数返回参数二进制中 1 的个数
分析:int型32个bit,将一个数化为二进制,将其向右移位然后和1做按位与,若结果等于1,则它就是1。然后统计个数。

define _CRT_SECURE_NO_WARNINGS
#include"stdio.h"
#include"stdlib.h"
Return1(int n){
	int i = 0;
	int count = 0;
	for (i = 0; i < 32; i++){
		if (((n>> i)&1) == 1){
			count++;
		}
	}
	return count;
}
int main(){
	int n = 0, count = 0;
	printf("please input the number:\n");
	scanf("%d", &n);
	printf("%d", Return1(n));
	system("puase");
}

2.获取一个数二进制序列中所有的偶数位和奇数位,
分别输出二进制序列。

void show_num(int n){
	int i = 0;
	int count = 0;
	for (i = 31; i >= 1; i -= 2){
		printf("%d", ((n >> i) & 1) == 1);
	} //最高的偶数位向右移动31位到最后一位,最低的向右移动一位
	printf("\n");
		for (i = 30; i >= 0; i -= 2){
			printf("%d", ((n >> i) & 1) == 1);  //最高的奇数位向右移动30位到最后一位,最低的向右移动0位
		}
	}
int main(){
	printf("获取输出的偶数序列和奇数序列\n");
	int n = 11;
	show_num(n);

	system("pause");
}

3.输出一个整数的每一位。
分析:各位模十便能得到结果,因为不知道又多少位数,因此可以采用递归调用求其他位数上的数

 void Show_num(int n){   //递归调用
	if (n != 0){
		if (n < 0){
			n = -n;
		}
		printf("%d\n", n % 10);
		Show_num(n / 10);
	}
}
	int main(){
		int n;
		printf("please input a number:\n");
		scanf("%d", &n);
		Show_num(n);
		system("pause");

	}

4.两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入例子:
1999 2299
输出例子:7
分析:首先我们知道一个数和另一个数异或,相同为0,不同为1.因此我们可以先对两数进行异或,然后在进行前面求二进制1的操作,便能得到想要的结果。

int Different(int m,int n){
	int i, count = 0;
	m ^= n;
	for (i = 0; i < 32; i++){
		if ((m>>i)&1 == 1){
			count++;
		}
	}

		return count;
	
}
int main(){
	int m, n;
	printf("please input two numbers:\n");
	scanf("%d %d", &m, &n);
	printf("%d",Different(m, n));
	system("pause");
}

总结:在C语言中,有算术操作符,移位操作符,位操作符,赋值操作符,单目操作符,关系操作符,逻辑操作符,条件操作符,逗号表达式。
1、算术操作符有+、-、*、/、%,需要注意的是进行%操作时,两个操作数必须为整数,返回的是余数。
2、移位操作符:操作的对象是二进制,进行左移操作就相当与乘以2,左边抛弃,右边补0;进行右移操作时它又分为两种:(1)逻辑移位,左边用0填充,右边丢弃,(2)算数移位,左边用原该值的符号位填充,0代表正,1代表负,右边丢弃。
3、位操作符:&(按位与),有两个操作数,两者都为1则为1,否则为0;
       |(按位或), 有两个操作数,两者都为0则为0,否则为1;
       ^(按位异或),有两个操作数,相同为0,不同为1;
4、赋值运算符:“=”即为赋值运算符,还有一些有复合效果的赋值运算符:+=、-=、*=、/=、%=、>>=、<<=、&=、|=、^=  
5.单目运算符:即只有一个操作数进行操作的运算符。有:! - + & sizeof ~ -- ++ *
6.关系运算符:顾名思义判断两数的关系,有:> >= < <= != ==一般使用!= == 
7.逻辑操作符:逻辑与和逻辑或,最终只有两种结果,要么真要么假(即要么0要么1),逻辑取反,真变假。
8.条件操作符exp?exp2:exp3若exp成立则返回exp2的值,否则返回exp3的值。
9.逗号表达式:只执行最后一个逗号后的表达式。
10、"."操作符,访问结构成员
共勉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值