C语言01 -- 运算符

2020-12-25  本文已影响0人  YanZi_33

位运算符

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

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;
}

位与 -- &

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;
}

位或 -- |

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;
}

位异或 -- ^

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;
}
上一篇下一篇

猜你喜欢

热点阅读