zoukankan      html  css  js  c++  java
  • C# 位运算符

    位运算符包括:

    | 按位或 OR,& 按位与 AND,^ 按位异或 XOR,~ 取反 NOT,<< 左移 Left Shift,>> 右移 Right Shift,等等。

    1.异或运算(^)

    二元 ^ 运算符是为整型和 bool 类型预定义的。对于整型,^ 将计算操作数的按位“异或”。对于 bool 操作数,^ 将计算操作数的逻辑“异或”;也就是说,当且仅当只有一个操作数为 true 时,结果才为 true。

    数值运算举例

    按位异或的3个特点:
    (1) 0^0=0,0^1=1  0异或任何数=任何数
    (2) 1^0=1,1^1=0  1异或任何数-任何数取反
    (3) 1^1=0,0^0=0  任何数异或自己=把自己置0

    例如:10100001^00010001=10110000

    2. & 运算符(与)

    1 & 0 为0
    0 & 0 为0
    1 & 1 为1

    3. | 运算符(或)

    1 | 0 为1
    0 | 0 为0
    1 | 1 为1

     4. 左移 (<<)

      将第一个操作数向左移动第二个操作数指定的位数,空出的位置补0。
      左移相当于乘. 左移一位相当于乘2;左移两位相当于乘4;左移三位相当于乘8。

      x<<1= x*2 
      x<<2= x*4 
      x<<3= x*8 
      x<<4= x*16

      同理, 右移即相反:

     5. 右移 (>>) 

      将第一个操作数向右移动第二个操作数所指定的位数,空出的位置补0。

      右移相当于整除. 右移一位相当于除以2;右移两位相当于除以4;右移三位相当于除以8。

      x>>1= x/2 
      x>>2= x/4 
      x>>3= x/8 
      x>>4=x/16

    6. 复合赋值运算符

    <<=

    左移且赋值运算符

    C <<= 2 等同于 C = C << 2

    >>=

    右移且赋值运算符

    C >>= 2 等同于 C = C >> 2

    &=

    按位与且赋值运算符

    C &= 2 等同于 C = C & 2

    ^=

    按位异或且赋值运算符

    C ^= 2 等同于 C = C ^ 2

    |=

    按位或且赋值运算符

    C |= 2 等同于 C = C | 2

    例子1:使用^ 按位异或交换2个数

    复制代码
    int x = 4; 
    int y = 6;
    x ^= y;
    y ^= x;
    x ^= y;
    Console.WriteLine(x); //6
    Console.WriteLine(y); //4
    复制代码

    以上过程是这样的:
    (1)x ^= y,相当于x = x ^ y
    x的二进制是:00100
    y的二进制是:00110
    x和y进行异或,结果是:00010
    x转换成十进制后,x为:2

    (2)y ^= x,相当于y = y ^ x
    y的二进制是:00110
    x的二进制是:00010
    y和x进行异或,结果是:00100
    y转换成十进制后,y为:4

    (3)x ^= y,相当于x = x ^ y
    x的二进制是:00010
    y的二进制是:00100
    x和y进行异或,结果是:00110
    x转换成十进制后,x为:6

    由于异或运算符是二进制里面的01  比如 3^4=11^100 首先前面是2位后面是3位  后面第一个1前面那个没有所以就是1第二个是0前面那个是1所以就是1 得到结果是111 ,因为0和0相同的数就是0不同的数就是1

     实战应用

    如果某个字段的值都是二进制相加的如 1+2+4+8

    那么

    user.GroupValues ^= 128; 如果有128就去掉128
    user.GroupValues |= 128; 如果没有128就加上128

    原文:https://www.cnblogs.com/qingheshiguang/p/13785016.html

    云在青天水在瓶
  • 相关阅读:
    结构体作为函数参数
    自定义子窗口与主窗口通信
    Qt性能问题
    后缀表达式、中缀表达式
    QMap的使用
    自定义QSS
    Qt查找孩子findChild
    ThinkPHP 3.2.3 数据缓存与静态缓存
    Hadoop生态上几个技术的关系与区别:hive、pig、hbase 关系与区别  Pig
    Hadoop生态上几个技术的关系与区别:hive、pig、hbase 关系与区别  Pig
  • 原文地址:https://www.cnblogs.com/flms/p/14846312.html
Copyright © 2011-2022 走看看