C#中對byte類型的處理。

來源:互聯網
上載者:User

可能很多人都沒有注意到,C#中對byte類型的處理還是很特殊的。

下面我用幾行簡單的代碼來說明問題

byte x=1;

byte y=2;

byte z=x+y;  //error:無法將int類型轉換為byte類型

可能很多人會認為這段代碼沒有問題,實際上第三行會產生編譯錯誤:無法將int類型轉換為byte類型!

這是為什麼呢?因為C#編譯器會認為byte類型和byte類型運算的結果是int型,實際上對short類型也做了相似的處理。

至於為什麼這樣設計,我的看法是byte或short類型相互運算比較容易發生溢出,所以在運算的時候直接都轉換為int來運算了。

 

再看下面的代碼

byte i=1;  //OK

這裡的字面值1是被編譯器識別為int類型的,在以上聲明中,整數 1int 類型隱式轉換為 byte 類型。如果整數超出了 byte 類型的範圍,則將發生編譯錯誤。

上面是MSDN中的說法,實際上這個隱式轉換違背了範圍小的類型可以隱式轉換為範圍大的類型這條規則,但是在C#中這個轉換的確是合法的。

注意這個轉換隻有用整型的字面值來賦值運算的時候才成立,像這樣就不可以了:

int x=1;

byte i=x; //error: 無法將int類型轉換為byte類型

 

在看下面的代碼:

byte i=1;

i+=1;  //OK

這行代碼是可以通過的,原因是C#中x+=y並不是總相當於x=x+y的!

如果x+y的結果的類型可以隱式轉換為x的類型,那麼x+=y相當於x=x+y

如果x+y的結果的類型可以顯式轉換為x的類型,並且x=y也合法,那麼x+=y相當於x=(T)(x+y),其中T是x的類型。

就像上面這行代碼,i+1是int類型的,可以顯式轉換為byte類型,而i=1也合法,所以i+=1就相當於i=(byte)(i+1)

i=i+1;  //error:無法將int類型轉換為byte類型

這行比較容易理解,1被編譯器識別為int類型,所以i+1的結果是int類型的,無法將int類型轉換為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.