C语言从零开始——位运算练习

练习

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

创建test1.c文件

#include <stdio.h>
int main(void)
{
        int a = 0b11100101;
        //当bit3变为1:0b1110 1101 十六进制表示:0xED
        a |= 1 << 3;
        printf("a = 0x%X \n",a);

        return 0;
}

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

创建一个test2.c文件

#include <stdio.h>
int main(void)
{
        int a = 0b10110101;
        //0b1111 1000
        //设置成功a:11111101 十六进制:0xFD
        a |= 0xf8;
        printf("a = 0x%X \n",a);
        return 0;
}


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

创建一个test3.c文件

#include <stdio.h>
int main(void)
{

        int a = 0xEFF8;
                //0b1110 1111 1111 1000
                //0b0110 1111 1111 1000
                //0x6FF8
        a &= ~(1 << 15);
        printf("a = 0x%X \n",a);
        return 0;
}

//4.给定一个整形数a,清除a的bit15~bit23,保持其他位不变。
创建一个test4.c文件


#include <stdio.h>
int main(void)
{
        int a = 0xABCD1234;
        //0b1010 1011 1100 1101 0001 0010 0011 0100
        //0b1010 1011 0000 0000 0001 0010 0011 0100
        //0xAB001234
        a &= ~(0x1FF << 15);
        printf("a = 0x%X \n",a);

        return 0;
}

//5.给定一个整形数a,取出a的bit3~bit8。
创建一个test5.c文件

#include <stdio.h>
int main(void)
{
        int a = 0xB7C;
        //a = ob1011 0111 1100
        //R = 0b0001 0111 1000          
        //R = 0x178
        a &= 0x1f8;
        printf("Result = 0x%x \n",a);
        return 0;
}

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

创建一个test.6文件

#include <stdio.h>

int main(void)
{
        int a = 0x7A73B;
        //a = ob0111 1010 0111 0011 1011
        //937=0b0001 1101 0100 1
        //R = 0b0101 1101 0100 1011 1011
        //%x= %x5D4BB
        //0011 1111 1111 1000 0000
        a &= ~(0b11111111111 << 7);
        a |= 937 << 7;
        printf("a = 0x%X \n",a);
        return 0;
}

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

创建一个test7.c文件

#include <stdio.h>
int main(void)
{
        int a = 0x7A73B;
        //a = 0b0111 1010 0111 0011 1011
        //17 =        000 1000 1
        //R = 0b0111 1010 1111 1011 1011
        //0x= 0x7AFBB
        a += 0b10001 << 7;
        printf("R = 0x%X \n",a);
        return 0;
}

//8.用C语言给一个整形数的bit7~bit17赋值937,同时给bit21~bit25赋值17.
创建一个test8.c文件

#include <stdio.h>
int main(void)
{

        int a = 0x7A73B;
        a &= ~(0b11111111111 << 7);
        a |= 937 << 7;
        //a = ob0111 1010 0111 0011 1011
        //937=0b0001 1101 0100 1
        //R = 0b0101 1101 0100 1011 1011
        //%x= %x5D4BB
        //00 0000 0101 1101 0100 1011 1011//赋值937
        //10 0010 0101 1101 0100 1011 1011//赋值17
        //%x= %x225D4BB
        a &= ~(0b11111 << 21);
        a |= 17 << 21;
        printf("Resilt = 0x%X \n",a);

        return 0;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值