J'ai trouvé une situation étrange dans le compilateur C#. Pourquoi la distribution ci-dessous est requise?C# Bitwise OR doit être casté avec des octets * parfois *
using System;
class Program
{
private const byte BIT_ZERO_SET = 1;
private const byte BIT_ONE_SET = 2;
private const byte BIT_TWO_SET = 4;
static void Main(string[] args)
{
byte b = BIT_ZERO_SET | BIT_ONE_SET;
Console.WriteLine(b);
//Does not compile, says needs to cast to int.
//b = b | BIT_TWO_SET;
//Compiles...ugly
b = (byte)(b | BIT_TWO_SET);
Console.WriteLine(b);
Console.WriteLine("Press enter.");
Console.ReadLine();
}
}
Merci.
Cela a du sens ... – Nate
+1, Oui, le compilateur calculera des expressions constantes lors de la compilation. Ce qui explique pourquoi la première affectation ne donne pas d'erreur. –
@Godeke: Comment dites-vous quelque chose de différent de ce qu'il est? Il dit que la valeur résultante d'un OU «bit» sur un «byte» est un int. –