在c#中将bool表达式转换为char

时间:2016-07-04 06:53:19

标签: c# clr

当我遇到类似下面的问题时,我通过了.NET测验。

Char ch = Convert.ToChar('a' | 'e' | 'c' | 'a');

在控制台中,我们可以看到ch变量的输出为g

有人可以描述发生了什么吗? 谢谢!

3 个答案:

答案 0 :(得分:34)

“|”是二元OR运算符。

'a' binary representation is 01100001
'e' binary representation is 01100101
'c' binary representation is 01100011

OR的结果是01100111,其char表示为g

答案 1 :(得分:21)

这不是第一次看起来的样子。这些int的{​​{1}}表示更多是二进制计算:

以下是一篇完整的文章,通过示例解释了这一点:Article

因此,Char的按位Or的二进制结果为'a' | 'e' | 'c' | 'a'。如果将其转换为Char,则为103

修改

我认为这个答案比我更受关注,但它应该得到更多细节。

来自C#编译器端:

有一个从char到int(g编译)的隐式转换,所以编译器实际上做的是:

int i = 'a'

由于这些是硬编码值,编译器会做更多工作:

Convert.ToChar((int)'a' | (int)'e' | (int)'c' | (int)'a');

最后:

Convert.ToChar(97 | 101 | 99 | 97);

如果这些不是硬编码值:

Convert.ToChar(103); // g

使用Roslyn,你得到:

private static char BitwiseOr(char c1, char c2, char c3, char c4)
{
    return Convert.ToChar(c1 | c2 | c3 | c4);
}

转换为IL (使用private static char BitwiseOr(char c1, char c2, char c3, char c4) { return Convert.ToChar((int)c1 | c2 | c3 | c4); } (按位)IL指令):

or

答案 2 :(得分:10)

转到unicode-table

  • 'a'十进制值为 97 ,二进制为01100001
  • 'e'十进制值 101 ,二进制为01100101
  • 'c'十进制值 99 ,二进制为01100011
  • 'a'十进制值为 97 ,二进制为01100001
按位的

运算符为'|'。 所以你的表达式等于:

01100001
01100101
01100011
01100001,结果为01100111

如果列中至少有一次 1

结果 1

转换为十进制的

01100001 103 我们将再次访问unicode-table,我们会看到deciaml中的 103 等于'g'

所以你问这个函数是做什么的,它计算二进制值然后将它转换为Decimal值并返回它的 unicode 字符。