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

来源:互联网 发布:淘宝网拍下商品的步骤 编辑:程序博客网 时间:2024/05/17 22:38

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

提示:0 ^ 0 = 0; 1 ^ 1 = 0; 0 ^ 1 = 1; 1 ^ 0 = 1;


#include <stdio.h>

int main()
{
        int array[32] , new_bit[32];        //利用数组存放数的二进制形式存放在

        int a , b ;
        int i, j ;

        printf("Please enter a number for a:");
        scanf("%d",&a);
        printf("The binary of integer %d is :\n",a);

        for( i = 31 ; i >= 0 ; i-- , a >>= 1)              //利用数a与1相与求二进制,二进制从最高位到最低位求,每求得一位就将该数放入数组,从数组的最后面开始存放,a 右移求下一位
        {
                array[i] = 1 & a ;                    
        }

        for( i = 0 , j = 0 ; i < 32 ; i++ )
        {
                printf("%d",array[i]);
                j++;
                if( j  % 4 == 0 )
                        printf(" ");
        }

        printf("\n");
//第一位和最后一位没有和其他数相异或,直接放到new数组,其他new数组的元素由array数组同一位置的前一个和后一个相异或而得
        new_bit[0] = array[0];

        for( j = 1; j < 31 ; j++ )
        {
                new_bit[j] = array[j - 1] ^ array[j + 1];
        }

        new_bit[j] = array[31];

        printf("The new binary is :\n");

        for( i = 0 , j = 0 ; i < 32 ; i++ )
        {
                printf("%d",new_bit[i]);
                j++;
                if( j % 4 == 0 )
                        printf(" ");
        }

        printf("\n");

       return 0;
}

程序运行示例:
Please enter a number for a:45
The binary of integer 45 is :
0000 0000 0000 0000 0000 0000 0010 1101 
The new binary is :
0000 0000 0000 0000 0000 0000 0100 1101

0 0
原创粉丝点击