美文网首页
同或、异或、位移、按位与、按位或运算

同或、异或、位移、按位与、按位或运算

作者: 张_何 | 来源:发表于2018-08-15 22:50 被阅读0次

    同或运算

    运算法则:相同为1,不同为0
    运算符号:⊙
    表达式:a⊙b=ab+a'b'(a'为非a,b'为非b);


    异或运算

    运算法则:相同为0,不同为1
    运算符号:⊕
    表达式 :a⊕b=a'b+ab'(a'为非a,b'为非b)
    异或运算的常见用途:

    (1) 使某些特定的位翻转
        例如对数10100001的第2位和第3位翻转,则可以将该数与00000110进行按位异或运算。
           10100001^00000110 = 10100111
    
    (2) 实现两个值的交换,而不必使用临时变量。
        例如交换两个整数a=10100001,b=00000110的值,可通过下列语句实现:
        a = a^b;   //a=10100111
        b = b^a;   //b=10100001
        a = a^b;   //a=00000110
    

    位移运算

    左移运算

    运算符:<<
    表达式:m<<n(表示把m左移n位)
    运算规则:左移n位的时候,最左边的n位将被丢弃,同时在最右边补上n个0
    eg:00001010 << 2 = 00101000

    右移运算

    运算符:>>
    表达式:m>>n(表示把m右移n位)
    运算规则:右移n位的时候,最右边的n位将被丢弃。 这里要特别注意,如果数 字是一个无符号数值,则用0填补最左边的n位。如果数字是一个有符号数值,则用数字的符号位填补最左边的n位。也就是说如果数字原先是一个正数,则右移之后再最左边补n个0;如果数字原先是负数,则右移之后在最左边补n个1
    eg: 00001010 >> 2 = 00000010
    eg: 10001010 >> 3 = 11110001
    补充:二进制中把最左面的一位表示符号位,0表示正数,1表示负数


    按位与运算

    运算符:&
    表达式: 00000101 & 00001100 = 00001000

    按位或运算

    运算符:|
    表达式:00000101 | 00001100 = 00001110

    按位与按位或用途:

    typedef NS_ENUM(NSInteger, TestType){    //定义枚举
        TestTypeNone        = 0,
        TestTypeFirst          = 1<<0,
        TestTypeSecond    = 1<<1,
        TestTypeThird         = 1<<2,
        TestTypeFourth      = 1<<3
    };
    
    //测试代码
        TestType type = TestTypeFirst | TestTypeFourth;
        if (type & TestTypeFirst) {
            NSLog(@"TestTypeFirst");
        }
        if (type & TestTypeSecond) {
            NSLog(@"TestTypeSecond");
        }
        if (type & TestTypeThird) {
            NSLog(@"TestTypeThird");
        }
        if (type & TestTypeFourth) {
            NSLog(@"TestTypeFourth");
        }
        if ((TestTypeFirst | TestTypeThird) & (TestTypeSecond | TestTypeFourth)) {
            NSLog(@"(TestTypeFirst | TestTypeThird) & (TestTypeSecond | TestTypeFourth)");
        }
        if ((TestTypeFirst | TestTypeThird) & (TestTypeSecond | TestTypeThird | TestTypeFourth)) {
            NSLog(@"(TestTypeFirst | TestTypeThird) & (TestTypeSecond | TestTypeThird | TestTypeFourth)");
        }
    
    //输出结果
    TestTypeFirst
    TestTypeFourth
    (TestTypeFirst | TestTypeThird) & (TestTypeSecond | TestTypeThird | TestTypeFourth)
    

    相关文章

      网友评论

          本文标题:同或、异或、位移、按位与、按位或运算

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