美文网首页
C语言01 -- 运算符

C语言01 -- 运算符

作者: YanZi_33 | 来源:发表于2020-12-25 15:23 被阅读0次

位运算符

  • 位运算符只作用于整型与字符型的二进制位;
  • 位运算都是针对数据的补码进行处理的;
  • 位运算符主要分为以下6类:
    • 位与 -- &
    • 位或 -- |
    • 位异或 -- ^
    • 位反 -- ~
    • 位左移 -- <<
    • 位右移 -- >>

移位运算 (位左移 -- <<) 与 (位右移 -- >>)

  • 又分为逻辑移位算术移位
  • 逻辑移位的特征:
    • 逻辑移位针对正数,所有二进制位发生移动;
    • 左移规则: 低位补零;
    • 右移规则: 高位补零,低位丢弃;
  • 算术移位的特征:
    • 算术移位针对负数,所有二进制位发生移动;
    • 左移规则: 低位补零;
    • 右移规则: 高位补1,低位丢弃;
    • 为了保证负数的符号位不变,在右移时,在高位补1;
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        ///正数
        //逻辑左移 所有二进制位向左移动 低位补0
        int c = 65; //1000001
        c <<= 3;    //1000001000
        NSLog(@" c = %d",c);
        
        //逻辑右移 所有二进制位向右移动 高位补0,低位丢弃
        int n = 65; //1000001
        n >>= 2;    //0010000
        NSLog(@" n = %d",n);
        
        ///负数
        //算术右移 所有二进制位向右移动 高位补1,低位丢弃
        //-65
        //原码  11000001
        //反码  10111110 (符号位不变,数值位取反)
        //补码  10111111 (反码+1)
        //右移1 11011111 (高位补1,地位丢弃) -- 补码
        //反码  11011110 (补码-1)
        //原码  10100001 (符号位不变,数值位取反)
        //-33
        int p = -65;
        p >>= 1;
        NSLog(@" p = %d",p);
        
        //算术左移 所有二进制位向左移动 低位补0
        //-65
        //原码  11000001
        //反码  10111110 (符号位不变,数值位取反)
        //补码  10111111 (反码+1)
        //左移1 101111110
        //反码  101111101
        //原码  110000010
        //-130
        int m = -65;
        m <<= 1;
        NSLog(@" m = %d",m);
    }
    return 0;
}

位与 -- &

  • 运算规则:参加运算的两个数先转成二进制数 然后比较相同二进制位上的两个数;只有两个数同时为1,则该位结果才为1,否则为0; (负数按补码形式参加按位与运算)
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //位与& --> 比较相同二进制位上的两个数;只有两个数同时为1,则该位结果才为1,否则为0
        int a = 3;    //0000 0011
        int b = 5;    //0000 0101
        int c = a & b;//0000 0001
        NSLog(@" c = %d",c); //最终c=1
    }
    return 0;
}

位或 -- |

  • 位上的两个数;只要两个数有一个为1,则该位结果就为1,否则为0;
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //位与& --> 只要两个数有一个为1,则该位结果就为1,否则为0; 
        int a = 6;    //0000 0110
        int b = 9;    //0000 1001
        int c = a | b;//0000 1111
        NSLog(@" c = %d",c); //最终c=15
    }
    return 0;
}

位异或 -- ^

  • 运算规则:参加运算的两个数先转成二进制数 然后比较相同二进制位上的两个数;当果两个数值不同时,则该位结果为1,否则为0。
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //位与& --> 当果两个数 值不同时,则该位结果为1,否则为0
        int a = 6;    //0000 0110
        int b = 9;    //0000 1001
        int c = a ^ b;//0000 1111
        NSLog(@" c = %d",c); //最终c=15
    }
    return 0;
}

相关文章

网友评论

      本文标题:C语言01 -- 运算符

      本文链接:https://www.haomeiwen.com/subject/xnomnktx.html