位运算符的应用的总结

1、&运算符的应用;
     A. 清零某些位(与0相&);B. 保留某些位(与1相&) ;


2. |运算符的应用:
     置位某些位;


3. ^运算符的应用:
     A. 特定位翻转(与1相^);B.保留特定位(与0相^);C. 交换两个值,不用临时变量;


4. ~运算符的应用:
     为了保证可移植性:可用以下方法: a = a&~1;


5. 从一个数中第m位开始取其右面n位程式为:

 

    c = a>>(m-n+1) & ~(~0<<n)

6. 左移与左移运算

#include <stdio.h>

int main(void)
{
/*位右移运算*/
#if 0
    int a = 0xFFFFFFFF;
    int b = a >> 8;
    printf("b = %x/n",b);      /* 输出结果为FFFFFF           符号位为0,则右移后高位补0*/
#endif

#if 0
    int a = 0xFFFF0000;
    int b = ~a >> 8;
    printf("b = %x/n",b);      /* 输出结果为FF           取反后,符号位为0,则右移后高位补0*/
#endif
#if 0
    int a = 0xF000;
    int b = ~a >> 8;
    printf("b = %x/n",b);      /* 输出结果为FFFFFF0F                  取反后,符号位为1,则右移后高位补1*/
#endif
#if 0
    unsigned int a = 0xF000;
    unsigned int b = ~a >> 8;
    printf("b = %x/n",b);                             /*输出结果为FFFF0F*/
#endif
#if 0
    unsigned char  a = 0x33;
    unsigned char  b = ~a >> 4;
    printf("b = %x/n",b);                             /*输出结果为FC*/
#endif
#if 0
    char a = 0x33;
    char b = ~a >> 4;
    printf("b = %x/n",b);                              /*输出结果为FFFFFFFC*/
#endif

/*位左移运算*/
#if 0
    char a = 0x33;
    char b = ~a << 4;
    printf("b = %x/n",b);                              /*输出结果为FFFFFFC0*/
#endif
#if 0
    unsigned char a = 0x33;
    unsigned char b = ~a << 4;
    printf("b = %x/n",b);                              /*输出结果为C0*/
#endif
#if 0
    int a = 0xF000;
    int b = ~a << 8;
    printf("b = %x/n",b);                             /* 输出结果为FF0FFF00*/
#endif
#if 1
    unsigned int a = 0xF000;
    unsigned int b = ~a << 8;
    printf("b = %x/n",b);                             /* 输出结果为FF0FFF00*/
#endif
    return 0;
}


在进行位左移/右移运算的规则;
1、左移时,高位移出,低位补零;若不是以无符号字符型输出时,其输出是按整形输出;

2、右移时,有符号数,低位移出,高位补1 还是0 ,关键是看其符号位是1还是0;
                  无符号数,低位移出,高位补0;
3、只对有符号数进行右移位运算时,其数据按无符号数进行处理;

以上程序是在GCC编辑器上进行编辑得来的数据;

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值