Я делаю некоторые вопросы практики интервьюирования кода, и я не знаю, почему ответ на эту проблему 65, 65 - PullRequest
0 голосов
/ 06 марта 2020
public class Program
    {      
      public static void Main(string[] args)
        {
          char x = 'A';
           int i = 0;
          Console.WriteLine (true  ? x : 0);
          Console.WriteLine(false ? i : x); 
        }
    }

Я не могу найти ничего в Google, кто-то, пожалуйста, пролите свет на то, почему вывод 65,65

Ответы [ 3 ]

2 голосов
/ 06 марта 2020

A - 65 в кодировке ASCII. Тернарный оператор по существу выводит значение символа A, в данном случае 65.

Тернарный оператор по существу является оператором if else. Таким образом, Console.WriteLine (true ? x : 0); выведет 65, так как х находится в истинной части троичной. Console.WriteLine(false ? i : x); также выведет 65, поскольку x находится в ложной (остальной) части троичного

2 голосов
/ 06 марта 2020

Поскольку char - это не что иное, как число, точнее подписанное int, как видно из документов:

Тип char неявно преобразуется в следующие целочисленные типы: ushort , int, uint, long и ulong

Символ 'A' имеет кодовую точку Unicode 65. Таким образом, ваша троица просто возвращает int, в вашем случае 65.

Подробнее о char на MSDN: https://docs.microsoft.com/dotnet/csharp/language-reference/builtin-types/char

1 голос
/ 06 марта 2020

Поскольку вы можете неявно преобразовывать char в int, но не в обратном порядке, тип int побеждает и устанавливает тип результата.

Если бы это было наоборот, вы получили бы 'A' как результат.

Подробности { ссылка }).

        int intVar = '1';       //ok
        char charVar = (char)1; //ok
        char charVarError = 1;  //error
...