c#編譯器對byte類型的一些規則

來源:互聯網
上載者:User
csc在處理byte類型時,其實是有一些規則的,平時我們寫代碼可能沒有注意。

 舉個例子:
 
//有幾行這樣的代碼
byte a = 1;
byte b = 2;
//byte sum = a+b;   //incorrect

Console.WriteLine((a + b).GetType());static void Main()
{
  byte a = 1;
  byte b = 2;
  //byte sum = a+b;   //incorrect

  Console.WriteLine((a + b).GetType());
  Console.WriteLine((a - b).GetType());
  Console.WriteLine((a * b).GetType());
  Console.WriteLine((a / b).GetType());
   
  Console.Read();
}

 
   猜測一下GetType()之後輸出的結果是什麼呢?我相信肯定有些人會理所當然說是byte 了,

那麼你錯了 。其實應該是System.Int32類型的,被注釋的代碼其實是有問題的。

    這個問題可以說是編譯器在處理byte類型的運算的一個規則,在byte類型上運用+,-,*,/運算子時,

都被 隱式地轉換為System.Int32類型了。所以注釋的代碼需要顯示地轉換為byte類型,如: sum = (byte)a+b。

 

上面的輸出結果其實全是:System.Int32

      說得這裡,其實還有一個看起來更莫名其妙的規則,先看看,還是在先前的代碼上小小修改了一些

static void Main()
{
   byte a = 1;
   byte b = 2;
   
   byte c;
   c = b + 1;  //錯誤
   c = b += 1; //正常
   
   //輸出結果?        
   Console.WriteLine((b + 2).GetType());
   //這個輸出又是什麼呢?
   Console.WriteLine((b+=2).GetType());

   Console.Read();
}

  其實上面代碼就一個小區別,  + 與 += 的區別,很多人不明白 c = a += 1; 這個語句為什麼可以編譯通過,

a+=1 按 “道理” 來講應該就是我們上面代碼的測試結果,先計算右邊的運算式值,得到 2賦給c 變數,所以理論上應該是 System.Int32類型的,應該報編譯錯誤,其實不然,這也是編譯器在處理 byte類型的一個運算規則,如果不是很明白,

我用refloctor再次對它剝離一次,看清楚它的真實面目。

private static void Main()
{
    byte a = 1;
    byte b = 2;
    byte c = b = (byte) (b + 1);  //注意這行
    
    Console.WriteLine((b + 2).GetType());
    //注意下面這行
    Console.WriteLine((b = (byte) (b + 2)).GetType());
    Console.Read();
}

 

  再看看上面的代碼,一目瞭然了吧,編譯器在處理 c = b+=1 時,直接把+=運算結果顯示地轉換為 byte類型了,怪不得不會編譯出錯,我想它應該就是編譯器所謂的 “潛規則” 吧,:)

 

   內容不多,但都是我們平時寫代碼時應該注意的一些問題,歡迎大家拍磚!

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.