• C#之位运算


    符号:<<  >>  &  |  ^   ~

    作用:用于二进制数据的操作

        表达式: 表达式 + 运算符 + 表达式

    ~表达式或者是变量

    优先级:~高于<< , >> 高于 & 高于 | ^

    结合性:左结合

    说明:

    char a = 10

    10  << 2 -- 0000 1010 -- 0010 1000

    <<: 按位进行左移,把每个位都左移两个位置,在低位补0

    左移几位就是乘2的几次方

    10  >> 2 -- 0000 1010 -- 0000 0010

    >> :无符号右移:按位进行右移,把每个位都右移两个位置,在高位补0

    有符号右移:按位进行右移,把每个位都右移两个位置,在高位补符号位

    右移几位就是除2的几次方

    &:每个位都进行与,有0出0,全1出1

    1000 1111

    & 0100 0110

    0000 0110

    |:每个位都进行或,有1出1,全0出0

    1000 1111

    | 0100 0110

      1100 1111

    ^:每个位都进行或,相同出0,不同出1

    1000 1111

    ^ 0100 0110

      1100 1001

    ~: 每个位都进行取反

    1000 1111

    ~ 0111 0000

    // 比如现在有一个32位的数据,你想要把第8位变为1,怎么做?

    原始值:xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx

             |        0x1 << 8 

      0000 0000 0000 0000 0000 0001 0000 0000

    目标值:xxxx xxxx xxxx xxxx xxxx xxx1 xxxx xxxx

    在没改变其他值的情况下,让第8位一定是1

    //比如现在有一个32位的数据,你想要把第7和8位变为10,怎么做?

    原始值:xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx

    0x3 << 7

    ~   0000 0000 0000 0000 0000 0001 1000 0000

    &    1111 1111 1111 1111 1111 1110 0111 1111

           xxxx xxxx xxxx xxxx xxxx xxx0 0xxx xxxx

        0x2 << 7

    |     0000 0000 0000 0000 0000 0001 0000 0000

    目标值:xxxx xxxx xxxx xxxx xxxx xxx1 0xxx xxxx

    //比如现在有一个32位的数据,你想知道32位的数据里第25位是0还是1,怎么做?

    原始值:xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx

    0x1 << 25

    0000 0010 0000 0000 0000 0000 0000 0000

        &

    0000 00x0 0000 0000 0000 0000 0000 0000

     下表列出了 C# 支持的位运算符。假设变量 A 的值为 60,变量 B 的值为 13,则:

    运算符描述实例
    &(位与)有0出0,全1出1(A&B)将得到12,即为0000 1100
    |(位或)有1出1,全0出0(A|B)将得到61,即为0011 1101
    ^(位异或)相同出0,不同出1(A^B)将得到49,即为0011 0001
    ~(位取反)每个位都进行取反(~A)将得到-61,即为1100 0011一个有符号二进制数的补码形式
    <<

    按位进行左移,把每个位都左移两个位置,在低位补0

    左移几位就是乘2的几次方

    A<<2将得到240,即为1111 0000
    >>

    无符号右移:按位进行右移,把每个位都右移两个位置,在高位补0

    有符号右移:按位进行右移,把每个位都右移两个位置,在高位补符号位

    右移几位就是除2的几次方

    A>>2将得到15,即为0000 1111,B>>2将得到3即为0000 0011
    1. namespace Demo位运算
    2. {
    3. internal class Program
    4. {
    5. static void Main(string[] args)
    6. {
    7. //int a = 4;
    8. //int c= a << 3;
    9. //Console.WriteLine(c);
    10. int a = 16;
    11. int b = a >> 4;
    12. Console.WriteLine(b);
    13. }
    14. }
    15. }

  • 相关阅读:
    Aspose.Cells实现excel预览
    使用 dynamic-datasource 完成多数据源操作
    Nginx 反向代理 SSL 证书绑定域名
    【定义】三角形行列式和对角行列式
    ArchKeeper (开篇):架构守护平台的问题与理念
    单层应用升级到多层应用3
    普罗米修斯-spring-boot项目集成自定义监控及钉钉推送
    赴日IT 35岁以上程序员能申请日本技术人文签证吗?
    听,引擎的声音「GitHub 热点速览 v.22.33」
    source /etc/profile 自动生效
  • 原文地址:https://blog.csdn.net/weixin_52483742/article/details/132721548