【问题标题】:Pipe operator, how does it work?管道操作员,它是如何工作的?
【发布时间】:2013-04-02 20:40:05
【问题描述】:

所以我刚才乱七八糟,把这个写了出来:

        int i = 0|1|2|3|4|5|6|7|8|9|10;

        Console.WriteLine(i.ToString());
        Console.Read();

这输出 15。为什么它输出 15?管道操作员是做什么的?

你能给我一个实际使用的例子吗?

我明白这似乎是一个毫无意义的问题。

【问题讨论】:

    标签: c# pipe operator-keyword


    【解决方案1】:

    这是bit-wise OR operator

    OR 运算符的基本真值表是:

      A  B  A|B
      0  0   0
      0  1   1
      1  0   1
      1  1   1
    

    所以要分析你的案例0|1|2|3|4|5|6|7|8|9|10,用二进制表示:

     0 = 0b00000 
     1 = 0b00001 
     2 = 0b00010 
     3 = 0b00011 
     4 = 0b00100 
     5 = 0b00101 
     6 = 0b00110
     7 = 0b00111 
     8 = 0b01000 
     9 = 0b01001 
    10 = 0b01010
    ------------
    15 = 0b01111 
    

    进一步阅读

    【讨论】:

    • 突然间它被解释了。
    • @Plast1k 你也可以很容易地解释这一点,哈哈
    • 我不相信我能做到!我以前见过真值表,但并不能真正以这种方式应用它们。这帮助很大。
    • 我从 30 多年前在 8 年级的电子数学课上学到的东西中看到了这一点。哈哈,这就像骑自行车 AND OR NOT NOR NAND 等等...哈哈
    • 绝对是令人困惑的东西,但你是对的,它确实会回来。
    【解决方案2】:

    | 是 C#(和许多其他语言)中的按位或运算符。两个位之间的 OR 操作如下:

    0 | 0 = 0
    1 | 0 = 1
    0 | 1 = 1
    1 | 1 = 1
    

    所以十进制 1 | 2变成01 |二进制的 10,结果为 11(十进制的 3),如下所示:

    01
    10
    --
    11
    

    按位或是累积运算所以:

     0 = 00000 
     1 = 00001 
     2 = 00010 
     3 = 00011 
     4 = 00100 
     5 = 00101 
     6 = 00110
     7 = 00111 
     8 = 01000 
     9 = 01001 
    10 = 01010
    ------------
    15 = 01111 
    

    【讨论】:

      【解决方案3】:

      您正在对这些数字的二进制表示进行按位或。二进制中的数字 0 到 10 如下所示:

      0000
      0001
      0010
      0011
      0100
      0101
      0110
      0111
      1000
      1001
      1010
      

      如果您要对所有这些数字的每个数字执行 OR,您最终会得到 1111 - 即十进制的 15。

      【讨论】:

      • 我认为计算数字的更简单方法是使用旧的 8421 方法,无论您在哪里看到 1,如果您想要 16,您可以添加值,例如 1001 = 9将是10000
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-08
      • 2018-08-15
      • 2020-03-30
      • 2012-03-17
      • 1970-01-01
      • 2012-06-25
      • 1970-01-01
      相关资源
      最近更新 更多