位操作训练

来源:互联网 发布:java包名命名有空格 编辑:程序博客网 时间:2024/04/29 13:47

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

#include <stdio.h>int int2bin(int num){    int i;    int count = 0;    for( i = 0; i < 8; i++)    {        if( num & 1 ==1)        {            count++;            }        num=num >> 1;    }    return count;}int main(){    int num;    int count;    printf("please input a number:");    scanf("%d", &num);    count=int2bin(num);     printf("%d\n",count);    return 0;}

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

#include <stdio.h>void int2bin( int num, int p1, int p2){    int i;    int bin[32];    for( i = 0; i < 32; i++)    {        if( num & 1 == 1)        {            bin[i] = 1;                        }        else        {            bin[i] = 0;            }        num = num >> 1;    }    for( i= p1; i <= p2; i++)    {        printf("%d", bin[i-1]);         }    printf("\n");}int main(){    int num;    int p1;    int p2;    int *p;    printf("please input a number:");    scanf("%d", &num);    printf("please input p1,p2(p1<p2):");    scanf("%d %d", &p1, &p2);    int2bin(num, p1, p2);     return 0;}

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

#include <stdio.h>void int2bin( int num, int p1, int p2){    int i;    int bin[32];    for( i = 0; i < 32; i++)    {        if( num & 1 == 1)        {            bin[i] = 0;                        }        else        {            bin[i] = 1;            }        num = num >> 1;    }    for( i= p1; i <= p2; i++)    {        printf("%d", bin[i-1]);         }    printf("\n");}int main(){    int num;    int p1;    int p2;    int *p;    printf("please input a number:");    scanf("%d", &num);    printf("please input p1,p2(p1<p2<32):");    scanf("%d %d", &p1, &p2);    int2bin(num, p1, p2);     return 0;}

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

#include <stdio.h>void int2bin( int num, int p, int v){    int i;    int bin[32];    for( i = 0; i < 32; i++)    {        if( num & 1 == 1)        {            bin[i] = 1;                        }        else        {            bin[i] = 0;            }        num = num >> 1;    }    bin[p-1] = v;    for( i= 31; i >= 0; i--)    {        printf("%d", bin[i]);        if( i % 4 == 0)        {            printf(" ");        }    }    printf("\n");}int main(){    int num;    int p;    int v;    printf("please input a number:");    scanf("%d", &num);    printf("please input p(p<32):");    scanf("%d", &p);    printf("please input v(0|1):");    scanf("%d", &v);    int2bin(num, p, v);     return 0;}

5、题目:输入一个32位的整数a,使用按位异或^运算,生成一个新的32位整数b,使得该整数b的每一位等于原整数a中该位左右两边两个bit位的异或结果
提示:0 ^ 0 = 0; 1^ 1 = 0; 0 ^ 1 = 1; 1 ^ 0 = 1;

#include <stdio.h>int int2bin( int a){    int i;    int b = 0;    for( i = 0; i < 32; i++)    {        if( i == 0 || i == 31)        {            b = b + (( a >> i) & 1);                        }        else        {            b = b +(( ((a >> (i - 1)) & 1) ^((a >> (i + 1)) & 1))<<i);        }     }   return b; }int main(){    int a;    printf("please input a :");    scanf("%d", &a);    printf("%d\n",int2bin(a));     return 0;}
0 0
原创粉丝点击