#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;
}