美文网首页
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