输入一个32位的整数a,使用按位异或^运算,生成一个新的32位整数b,使得该整数b的每一位等于原整数a中该位左右两边两个bit位的异或结果
代码:
#include <stdio.h>
//输入一个32位的整数a,使用按位异或^运算,生成一个新的32位整数b,
//使得该整数b的每一位等于原整数a中该位左右两边两个bit位的异或结果
void f(long a)
{
int i;
long m;
int p,q;//题中对首和尾的说明模糊,因此未做处理,保持原样
p =(int)( a & (1<<31) );//p代表32位的第一位,q代表最后一位
printf("%d",p);
for(i = 30; i > 0; i --)
{
m = (a & ( 1 << i - 1 )) ^ (a & ( 1 << i + 1 ));//将a中i位的两边做异或处理
if ( m ) //if else 这里也可以直接改成printf(“%d”,m);
{
printf("1");
}
else
{
printf("0");
}
}
q = a&(1);
printf("%d",q);
}
int main()
long n;
scanf("%ld",&n);
printf("计算出的新的值是:\n");
f(n);
printf("\n");
return 0;
}
运行结果:
自己手算出来的结果中,11和5的结果和计算机的结果不同。。。欢迎大家指点