Training2:位操作训练

    xiaoxiao2021-03-26  26

    

    题目一:请编写一个c函数,该函数给出一个字节中被置为1的位的个数

    #include <stdio.h>

     

    int main()

    {

    int num, mask;

    int count = 0;

    int i;

    char str[20];

     

    printf("Please input a number:\n");

    scanf("%d", &num);

     

        mask = 1 << 7;

     

    for(i = 0; i < 8; i++)

    {

    if((num & mask ? '1' : '0') == '1')

    {

    count++;

    str[i] = 1;

    }

    else

    {

    str[i] = 0;

    }

    num <<= 1;

    }

        

    printf("the number is:");

    for(i = 0; i < 8; i++)

    {

            printf("%d", str[i]);

    }

    printf("\n");

        printf("the number of one is %d.\n", count);

     

        return 0;

    }

     

    题目二:输入一个整数a,再输入两个整数p1,p2(p1,p2<32),输出该整数的二进制表示方法中从右端开始的p1p2.

    #include <stdio.h>

     

    int main()

    {

    int num, mask;

        int p1, p2;

    int i = 0;

    int j;

    char str[50];

     

    printf("Please input a number:\n");

    scanf("%d", &num);

        printf("Please input p1 p2(<32):\n");

    scanf("%d %d", &p1, &p2);

        

    mask = 1 << (p2 - 1);

     

        while(p2 >= p1)

    {

    if((num & mask ? '1' : '0') == '1')

    {

    str[i++] = '1';

                p2--;

    num <<= 1;

    }

    else

    {

        str[i++] = '0';

    p2--;

        num <<= 1;

    }

    }

     

    printf("the binary system is:");

    for(j = i-1; j >= 0; j--)

    {

    printf("%c", str[j]);

    }

    printf("\n");

     

     

        return 0;

    }

     

    题目三:输入一个整数a,再输入两个整数p1,p2(p1,p2<32),将该整数的二进制表示方法中从右端开始的p1p2位取反后输出

    #include <stdio.h>

     

    int main()

    {

    int num, mask;

        int p1, p2;

    int i = 0;

    int j;

    char str[50];

     

    printf("Please input a number:\n");

    scanf("%d", &num);

        printf("Please input p1 p2(<32):\n");

    scanf("%d %d", &p1, &p2);

        

    mask = 1 << (p2 - 1);

     

        while(p2 >= p1)

    {

    if((num & mask ? '1' : '0') == '1')

    {

    str[i++] = '0';

                p2--;

    num <<= 1;

    }

    else

    {

        str[i++] = '1';

    p2--;

        num <<= 1;

    }

    }

     

    printf("the binary system is:");

    for(j = i-1; j >= 0; j--)

    {

    printf("%c", str[j]);

    }

    printf("\n");

    }

     

    题目四:输入一个整数a,再输入两个整数p(p<32),v(0|1),将该整数ap位设置为v,输出修改后的该整数的二进制表示.

    #include <stdio.h>

     

    int main()

    {

    int a, p, v, mask;

    int i = 0;

    char str[50];

     

    printf("Please input a = ");

    scanf("%d", &a);

    printf("\n");

    printf("Please input p(<32) = ");

    scanf("%d", &p);

    printf("\n");

    printf("PLease input v(0/1) = ");

    scanf("%d", &v);

    printf("\n");

     

        mask = 1 << 31;

        

    for(i = 0; i < 32; i++)

    {

    if((a & mask ? '1' : '0') == '1')

    {

               str[i] = '1';

       a <<= 1;

    }

    else

    {

    str[i] = '0';

    a <<= 1;

    }

    }

     

    if(v == 0)

    {

    str[31-p] = '0';

    }

    else

    {

    str[31-p] = '1';

    }

     

    for(i = 0; i < 32; i++)

    {

    printf("%c", str[i]);

    }

        printf("\n");

     

     

        return 0;

    }

     

    题目五:输入一个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 a, mask;

    int i;

    int str[50], n_str[50];

        

    printf("Please input a number:");

    scanf("%d", &a);

        

    mask = 1 << 31;

     

    for(i = 0; i < 32; i++)

    {

    if((a & mask ? '1' : '0') == '1')

    {

    str[i] = 1;

    a <<= 1;

    }

    else

    {

    str[i] = 0;

    a <<= 1;

    }

    }

     

    for(i = 0; i < 32; i++)

    {

    if(i == 0)

    {

                n_str[i] = str[31] ^ str[i+1];

    }

    else if(i == 31)

    {

    n_str[i] = str[1] ^ str[i-1];

    }

    else

    {

        n_str[i] = str[i-1] ^ str[i+1];

    }

    }

     

    for(i = 0; i < 32; i++)

    {

    printf("%d", n_str[i]);

    }

    printf("\n");

     

        return 0;

    }

     

    转载请注明原文地址: https://ju.6miu.com/read-661858.html

    最新回复(0)