5.输入一个32位的整数a,使用按位异或^运算,生成一个新的32位整数b,使得该整数b的每一位等于原整数a中该位左右两边两个bit位的异或结果

本文介绍了一个通过位运算实现的整数异或算法。该算法首先将输入的整数转换为二进制形式,并逐位计算左右两边的异或结果。通过对32位整数的每一位进行操作,最终生成一个全新的整数b,该整数的每一位是原始整数相应位置上左右两边的异或结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<stdio.h>
void printf_b(int n)//递归输出二进制序列
{
	if(n==0)
	{
		return;
	}
	else
	{
		printf_b(n>>1);
		printf("%d",n&1);
	}
}

int main()
{
	int a,b;
	int i,j;
	int b_bit;
	printf("输入一个整数:");
	scanf("%d",&a);
        int a_backup;
	int a_left,a_right;
 

	for(i=0;i<32;i++)//外循环,控制次数并计算左右异或结果
	{
		a_backup=a;		
		if(i==31)//取最低位的左右位
		{
			a_right=0;
			a_left=(a_backup>>1)&1;
		}
	    else
		{
			for(j=0;j<30-i;j++)//内循环从第32位依次往前取
			{
				a_backup=a_backup>>1;
			}	
			a_left=a_right=a_backup;
			a_right=a_right&1;
			a_left=a_left>>2;
			a_left=a_left&1;
		}
//		printf("第%d位左边为%d,右边为%d\n",32-i,a_left,a_right);

		b=b<<1;
		b_bit=a_left^a_right;
		b=b|b_bit;
	}


	printf("异或生成的b为:");
	printf_b(b);
	printf("\n");
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值