C语言操作符相关练习题

 本博客代码中使用的操作符运算,可以查看博主的这篇博客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);
}

你可能感兴趣的:(C语言基础知识贴,c语言,学习,开发语言)