位运算符的应用的总结

    技术2024-07-10  62

    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)