美文网首页C
C语言-按位逻辑运算符和位移运算符

C语言-按位逻辑运算符和位移运算符

作者: Jimmy_L_Wang | 来源:发表于2018-09-27 09:32 被阅读0次

    按位逻辑运算符

    & 逻辑与
    | 逻辑或
    ^ 逻辑异或
    ~ 反码
    
    • 按位与运算符(bitwise AND operator) a & b 按位计算a和b的逻辑与;
    • 按位或运算符(bitwise inclusive OR operator) a | b 按位计算a和b的逻辑或;
    • 按位异或运算符(bitwise exclusive OR operator) a ^ b 按位计算a和b的逻辑异或;
    • 按位反运算符(~operator) ~a 计算a的反码(将每一位取反之后的值);

    a & b 两者都为1时结果为1;
    a | b 只要有一个为1,结果就为1;
    a ^ b 有且只有一个为1结果才为1;
    ~a 如果是0则结果为1,如果是1则结果为0;

    这些运算符的操作数必须是整数类数据类型或者枚举型。如果应用于浮点型等数据类型的操作数,编译时就会出错。

    逻辑运算符和按位逻辑运算符区别

    &, |, ~运算符会根据1为真,0为假的规则对操作数的各二进制进行逻辑运算。
    &&, ||, !运算符会根据非0为真,0为假的规则对操作数的值进行逻辑运算。

    5 & 4 -> 4           5 && 4 -> 1
    

    位移运算符

    <<运算符 a << b 将a左移b位,右面空出的位用0填充。

    a * 2^b

    >>运算符 a >> b 将a右移b位

    a / 2^b

    当操作数是有符号整型的负数时,位移运算的结果因编译器而已。在许多编译器中,会执行逻辑位移(logical shift)算术位移(arithmetic shift)

    无论采用哪种方法都会降低程序的可移植性,所以不要对负数进行位移

    有符号整数的内部表示

    用最高位表示数值的符号。

    如果该数为负,则符号为1;
    如果该数不为负,则符号为0;

    相关文章

      网友评论

        本文标题:C语言-按位逻辑运算符和位移运算符

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