C语言操作符相关练习题

本文详细介绍了C语言中涉及的操作,包括计算整数32位二进制中1的个数(补码表示)、判断是否为2的幂次、不同数位的计数、偶奇数位提取以及不使用临时变量交换整型变量的方法。
摘要由CSDN通过智能技术生成

 本博客代码中使用的操作符运算,可以查看博主的这篇博客C语言操作符与表达式详解

(1)输出一个整数,输出该数32位二进制表示中1的个数,其中负数用补码表示。

//(1)输出一个整数,输出该数32位二进制表示中1的个数,其中负数用补码表示。

int NumberOf(int x) {   //不同方法在第三题
	int count = 0;
	for (int i = 0; i < 32; i++)    //整数32位
	{
		if (((x>>i) & 1) == 1) {    //一个二进制数&1若等于1(...0001),说明其最后一位上为1,依次向右移位,统计1的数量
			count++;
		}

	}
	return count;
}
int main() {
	int x;
	scanf("%d", &x);
	int ret = NumberOf(x);
	printf("%d", ret);
}

(2)判断一个整数是否是2的n次方

 

//(2)判断一个整数是否是2的n次方
bool IsSquare(int n) {
	if ((n&(n-1))==0)       //2的n次方的数字二进制表示只有一个1,n&(n-1)若为1,表示该数字二进制中只有一个1
	{
		return true;
	}
	else
	{
		return false;
	}
}

int main() {
	int n;
	scanf("%d", &n);
	if (IsSquare(n) == true) {
		printf("Y");
	}
	else
	{
		printf("N");

	}
}

 (3)求两个数二进制中不同位的个数

//(3)求两个数二进制中不同位的个数
int NumberOf(int n) {
	int count=0;
	while (n)                 //当n中的1被消除完了,为0时退出循环
	{
		n = n & (n - 1);      //n每与(n-1)进行一次&操作,就会消去一个1
		count++;
	}
	return count;
}

int main() {
	int x, y;
	scanf("%d %d", &x, &y);
	int ret = x^y;   //异或操作,得到的结果x和y有几位不同就有几个1
	int count = NumberOf(ret);//统计数中1的个数,与第一题采取不同的方法
	printf("%d", count);
}

(4)获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列

 

//(4)获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列
int main() {
	int x;
	scanf("%d", &x);
	//打印偶数位
	for (int i = 31; i >= 1; i -= 2) {
		printf("%d ",(x>>i)&1);        //从高偶数位到低偶数位依次执行右移操作,与1执行&操作,结果为多少就是该偶数位的值
	}
	printf("\n");
	//打印奇数位
	for (int i = 30; i >= 0; i -= 2) {
		printf("%d ", (x >> i) & 1);   //从高奇数位到低奇数位依次执行右移操作,与1执行&操作,结果为多少就是该奇数位的值
	}
}

(5)交换两个整型变量,不允许创建临时变量

 

//(5)交换两个整型变量,不允许创建临时变量
int main() {
	int a, b;
	scanf("%d %d", &a, &b);
	a = a ^ b;       //a异或b
	b = a ^ b;       //b=a^b^b,   b^b=0,所以b=a
	a = a ^ b;       //a=a^b^a,   a^a=0,所以a=b
	printf("%d %d", a, b);
}

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值