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

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

作者: 张_何 | 来源:发表于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)

相关文章

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

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

  • 位运算

    运算符含义&按位与|按位或^按位异或~取反<<左位移>>右位移 按位与运算符(&)按位与运算将两个运算分量的对应位...

  • 位运算实用技巧(Java实现)

    1. Java支持的位运算符: &:按位与 |:按位或 ~:按位非(Esc下面那个键) ^:按位异或 <<:左位移...

  • C:按位与、按位或、按位异或运算

    一、按位与 & 1.概念:参加运算的两个对象,按二进制位进行“与”运算,负数按补码形式参加按位与运算。2.规则 3...

  • 位运算

    名称符号 按位与 & 按位或 | 按位异或 ^ 按位取反 ~ 左移运算 << 右移运算 >> &按位与的用法(相同...

  • 位运算

    右移>> 左移<< 按位或 | 按位与 & 按位异或 ^ 按位取反~ 异或运算 x^0 = 0;x^1s = ~x...

  • &(按位与) |(按位或) ^(异或)

    不论是&、|还是^都是以二进制的形式进行比较 &(按位与) |(按位或) ^(异或)

  • 位运算:包括按位与(&)、按位或(|)、异或(^)、按位取反(~)以及移位(<<,>>)。“与”同为‘1’为‘...

  • C语言:按位运算

    C语言:按位运算 C有这些按位运算的运算符& 按位的与| 按位的或~ 按位取反^ 按位的异或<< ...

  • 算法学习——实现一个加法运算,不适用 + - *

    算法要求如题 需要了解下面几个概念: 运算符含义&按位与|按位或^按位异或<<左移>>右移 按位与按位或异或左移1...

网友评论

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

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