C语言练习11.12

位运算早就知道了,但是学校没有要求深入也就没有学习,所以我也就没有看过多少。但是还是很有挑战的,因为没有做过。

1打印下面的图形。

     *
    ***
   *****
    ***
     *
#include<stdio.h>
int main()
{
    int i,j,k;
    int n;
    scanf("%d", &n);
    for(i=1;i<=n/2+1;i++){
        for(j=n/2; j>=i; j--)
            printf(" ");
        for(k=1; k<2*i; k++)
            printf("*");
        printf("\n");
    }
    for(i=1;i<=n/2;i++){

        for(j=0;j<i;j++)
            printf(" ");
        for(k=i;k<=(n/2)*2-i;k++)
            printf("*");
        printf("\n");
    }
    return 0;
}

练习:
1.给定一个整型数a,设置a的bit3(为1),保证其他位不变。

#include <stdio.h>

int main(void)
{
    unsigned int a = 0x12345678;
    unsigned int b = 1 << 3; //右移两位,将1移至第三位。
    a = a | b; //将第三位变成1。

    printf("a = 0x%x\n", a);//打印结果。

    return 0;
}

2.给定一个整形数a,设置a的bit3~bit7,保持其他位不变。

#include <stdio.h>

int main(void)
{
    unsigned int a = 0x12345678;
    unsigned int b = 0x1f << 3; 
    a = a & ~b;

    a = a | 12 << 3; //将3到7位或上12(d)

    printf("a = 0x%x\n", a);

    return 0;
}

3.给定一个整型数a,清除a的bit15,保证其他位不变。

#include <stdio.h>

int main(void)
{
    unsigned int a = 0x12345678;
    unsigned int b = 1 << 15; //右移15位,将1放置15位
    a = a & ~b; //取反,并清0

    printf("a = 0x%x\n", a);

    return 0;
}

4.给定一个整形数a,清除a的bit15~bit23,保持其他位不变。

#include <stdio.h>

int main(void)
{
    unsigned int a = 0x12345678;
    unsigned int b = 0x1ff << 15; //右移15位,将最右边的一放置15位
    a = a & ~b; //取反,并清0

    printf("a = 0x%x\n", a);

    return 0;
}

5.给定一个整形数a,取出a的bit3~bit8。

#include <stdio.h>

int main(void)
{
    unsigned int a = 0x12345678;
    unsigned int b = 0x3f << 3; 
    b = a & b;//与出3到8位的二进制数字
    b = b >> 3;

    printf("a = 0x%x\n", b);

    return 0;
}

6.用C语言给一个整形数的bit7~bit17赋值937(其余位不受影响)。

#include <stdio.h>

int main(void)
{
    unsigned int a = 0x12345678;
    unsigned int b = 0x7ff << 7; 
    a = a & ~b;
    a = a | (937 << 7); 

    printf("a = 0x%x\n", a);

    return 0;
}

7.用C语言将一个整形数的bit7~bit17中的值加17(其余位不受影响)。

#include <stdio.h>

int main(void)
{
    unsigned int a = 0x12345678;
    unsigned int b = 17 << 7; //17 左移7位
    a = a + b;//相加

    printf("a = 0x%x\n", a);

    return 0;
}

8.用C语言给一个整形数的bit7~bit17赋值937,同时给bit21~bit25赋值17.

#include <stdio.h>

int main(void)
{
    unsigned int a = 0x12345678;
    unsigned int b = 0x7ff << 7; 
    a = (a & ~b) + (937<<7);//将7到17 位重新赋值 937
    a = (a & ~(0x1f << 21)) + (17 << 21);//将21到25位重新赋值17
    printf("a = 0x%x\n", a);

    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值