0527作业

  • Training2:位操作训练

  • 题目:请编写一个c函数,该函数给出一个字节中被置为1的位的个数
  • #include<stdio.h>
    int main()
    {
        char a;
    	int i,mask,count;
     
    	printf("Please enter a char:\n");
    	scanf("%c",&a);
    	mask = 1;                     //掩码00000001
    	count = 0;
    	for(i=0;i<8;i++)              //一个字节8bit
    	{
    		if((mask & a) != 0)         //与运算判断是否为1
    		{
    			count++;
    		}
    		mask = mask << 1;          //掩码左移一位判断原码下一位
     
    	}
    	printf("%d\n",count);
    }

  • 题目:输入一个整数a,再输入两个整数p1,p2(p1,p2<32),输出该整数的二进制表示方法中从右端开始的p1到p2位.
  • #include <stdio.h>
    //题目:输入一个整数a,再输入两个整数p1,p2(p1,p2<32),输出该整数的二进制表示方法中从右端开始的p1到p2位.
    void fun(int n, int p1, int p2)
    {
        int i;
        if (p1 > p2)
        {
            int tmp;
            tmp = p2;
            p2 = p1;
            p1 = tmp;
        }//对p1/p2排序,让p1<p2
    
        for (i = p2; i >= p1; i--)
        {
            int tmp = 0;
            tmp = (n >> (i - 1)) & 1;
            if (tmp == 1)
            {
                printf("1");
            }
            else
            {
                printf("0");
            }
        }
    }
    
    int main()
    {
        int n, p1, p2;
        printf("请输入n,p1,p2,用空格隔开\n");
        scanf("%d,", &n);
        scanf("%d,", &p1);
        scanf("%d,", &p2);
        fun(n, p1, p2);
        printf("\n");
    
        return 0;
    }
    

  • 题目:输入一个整数a,再输入两个整数p1,p2(p1,p2<32),将该整数的二进制表示方法中从右端开始的p1到p2位取反后输出
  • #include <stdio.h>
    //题目:输入一个整数a,再输入两个整数p1,p2(p1,p2<32),输出该整数的二进制表示方法中从右端开始的p1到p2位.
    void fun(int n, int p1, int p2)
    {
        int i;
        if (p1 > p2)
        {
            int tmp;
            tmp = p2;
            p2 = p1;
            p1 = tmp;
        }//对p1/p2排序,让p1<p2
    
        for (i = p2; i >= p1; i--)
        {
            int tmp = 0;
            tmp = (n >> (i - 1)) & 1;
            if (tmp == 1)
            {
                printf("0");
            }
            else
            {
                printf("1");
            }
        }
    }
    
    int main()
    {
        int n, p1, p2;
        printf("请输入n,p1,p2,用空格隔开\n");
        scanf("%d,", &n);
        scanf("%d,", &p1);
        scanf("%d,", &p2);
        fun(n, p1, p2);
        printf("\n");
    
        return 0;
    }
    

    结果

  • 题目:输入一个整数a,再输入两个整数p(p<32),v(0|1),将该整数a的p位设置为v,输出修改后的该整数的二进制表示.
  • 题目:输入一个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 i=0;
                int a=0;
                int b=30;
                int temp=0;
                printf("Please enter number:");
                scanf("%d",&a);
                printf("The new value generated is:\n");
                if(a<0)     
                {           a=-a;
                            printf("1"); 
                            temp=1^(a>>29&1);
                            printf("%c",(temp==1)?'1':'0');
                            b--;
                }
                else         
                { 
                            printf("0");
                }
               
                for(i=b;i>=1;i--)
                {
                           temp=(a>>(i+1)&1)^(a>>(i-1)&1);
                           printf("%c",(temp==1)?'1':'0');
                } 
                
                temp=a&1;
                printf("%c",(temp==1)?'1':'0');
                printf("\n");
    
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值