我在C#編譯器中發現了一個奇怪的情況。爲什麼需要投下?C#按位或需要使用字節鑄造*有時*
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();
}
}
謝謝。
這很有道理...... – Nate 2009-10-14 18:54:37
+1,是的,編譯器會在編譯時計算常量表達式。這解釋了爲什麼第一個作業不會給出錯誤。 – 2009-10-14 18:56:44
@Godeke:你怎麼和他說什麼不一樣?他的意思是,在一個字節上的一個按位「或」的結果值是一個整數。 – 2009-10-14 18:59:33