输入一个32位的整数a,使用按位异或^运算,生成一个新的32位整数b,使得该整数b的每一位等于原整数a中该位左右两边两个bit位的异或结果
提示:0 ^ 0 = 0; 1 ^ 1 = 0; 0 ^ 1 = 1; 1 ^ 0 = 1;
#include <stdio.h>
void int2bin(int a)
{
int i;
for(i = 0; i < 32; i++)
{
if((unsigned int)(a & 0x80000000) == (unsigned int)0x80000000) /*从左边开始将一个整数的32位二进制数输出*/
{
printf("1");
}
else
{
printf("0");
}
a = a << 1;
if(i % 4 == 0)
{
printf(" ");
}
}
printf("\n");
}
int xorbin(int a)
{
int i;
int b = 0;
for(i = 0; i < 32; i++)
{
if((i == 0)||(i == 31))
{
b =b+(((a >> i) & 1) << i); /*保留a的最左边和最右边的二进制数*/
}
else
{
b =b+((((a >> (i - 1)) &1) ^ ((a >> (i + 1)) & 1)) << i); /*就是将a的二进制数向右移(i-1)位,然后和1进 行与运算,得到a的二进制数中的第(i-1)位数, 然后将a的二进制数向右移(i+1)位,然后和1 进行与运算,得到a的二进制数中的第(i+1)位 数,然后进行异或运算,得到的结果就是a中第i 位左右两个bit位异或的结果,再将结果向左移i 位,加上b,其结果就是b的二进制数中的第i位。*/
}
}
return b;
}
int main()
{
int a;
int b;
printf("please input a number:\n");
scanf("%d",&a);
printf("the int2bin :\n");
int2bin(a); /*求出a的二进制数*/
printf("the oxrbin :\n");
b = xorbin(a); /*求出b的整型数*/
void int2bin(int a)
{
int i;
for(i = 0; i < 32; i++)
{
if((unsigned int)(a & 0x80000000) == (unsigned int)0x80000000) /*从左边开始将一个整数的32位二进制数输出*/
{
printf("1");
}
else
{
printf("0");
}
a = a << 1;
if(i % 4 == 0)
{
printf(" ");
}
}
printf("\n");
}
int xorbin(int a)
{
int i;
int b = 0;
for(i = 0; i < 32; i++)
{
if((i == 0)||(i == 31))
{
b =b+(((a >> i) & 1) << i); /*保留a的最左边和最右边的二进制数*/
}
else
{
b =b+((((a >> (i - 1)) &1) ^ ((a >> (i + 1)) & 1)) << i); /*就是将a的二进制数向右移(i-1)位,然后和1进 行与运算,得到a的二进制数中的第(i-1)位数, 然后将a的二进制数向右移(i+1)位,然后和1 进行与运算,得到a的二进制数中的第(i+1)位 数,然后进行异或运算,得到的结果就是a中第i 位左右两个bit位异或的结果,再将结果向左移i 位,加上b,其结果就是b的二进制数中的第i位。*/
}
}
return b;
}
int main()
{
int a;
int b;
printf("please input a number:\n");
scanf("%d",&a);
printf("the int2bin :\n");
int2bin(a); /*求出a的二进制数*/
printf("the oxrbin :\n");
b = xorbin(a); /*求出b的整型数*/
int2bin(b); /*求出b的二进制数*/
return 0;
}
return 0;
}