0
votes

Je suis en train de poser des questions sur la pratique des entrevues de codage et je ne sais pas pourquoi la réponse à ce problème est 65, 65

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); 
        }
    }
I can't find anything on google, someone please shed some light on why the output is 65,65

2 commentaires

65 est le code ASCII pour «A». Votre ternaire évalue à un entier.


Ah, ok merci beaucoup!


3 Réponses :


2
votes

Parce qu'un char n'est rien d'autre qu'un nombre, plus précisément un int signé, comme on le voit sur la documentation:

Le type char est implicitement convertible en l'intégrale suivante types: ushort, int, uint, long et ulong

Le caractère 'A' a le point de code unicode 65 . Ainsi, votre ternaire renvoie simplement int , dans votre cas 65 .

En savoir plus sur char sur MSDN: https://docs.microsoft.com/dotnet/csharp/language-reference/builtin-types/char


0 commentaires

2
votes

A vaut 65 en encodage ASCII. L'opérateur ternaire affiche essentiellement la valeur char de A, dans ce cas 65.

L'opérateur ternaire est essentiellement une instruction if else . Donc Console.WriteLine (true? X: 0); affichera 65 car x est dans la partie vraie du ternaire. Console.WriteLine (false? i: x); affichera également 65 car x est dans la partie false (else) du ternaire


0 commentaires

1
votes

Parce que vous pouvez implicitement convertir char en int mais pas l'inverse, donc le type int l'emporte et définit le type du résultat.

Si c'était l'inverse, vous obtiendrez 'A' comme résultat.

Détails https://stackoverflow.com/a/220268/11869962 ). p >

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


0 commentaires