蠍子
下面的討論,適用於C/C++/C#,我決定使用C#代碼來演示,為什麼?我覺得這段時間對C#這位兄弟的關注還是太少了。
有些人會抱怨,為什麼下面的代碼會觸發編譯器的警告:
他們會說:「對一個byte的操作,按理說,結果應該也是一個byte呀,為什麼會是一個int?」
要小心了大兄弟,你要求的東西,可能實際上並不是你真正想要的。
此話怎講?
就依你,假設我們生活在這樣一個世界:對任何byte類型變量的操作也會產生byte類型的結果。
如下圖所示:
這這個理想世界,變量i的值將會是16。為什麼?
因為兩個byte類型的變量相加,也會產生一個byte的結果,因為這裡存在整型溢出,所以,你會得到16這個結果。驚不驚喜?
類似的:int j = -b;
變量j的值實際上是224,而不是你所預期的-32,也是同樣的整型溢出原因導致的。
所以,請再問問自己,這真的是我想要的嗎?
讓我們來考察下列更加讓人防不勝防的代碼:
在我們的理想世界中,一旦這場遊戲的次數操作了255,則計算結果就是錯誤的。
為了解決這個問題,你可以這樣解決,雖然看起來代碼有點醜陋了:
所以,無論你如何精簡代碼,你都不得不添加上述這些強制類型轉換的代碼。
讓我這樣說白了吧:出於安全方面的考慮而出現的語法錯誤(例如,你知道不會產生溢出,但是你不得不加上強制類型轉換),比那些根本摸不著頭腦的運行時錯誤(例如,你忘記在計算工資的代碼中添加類型轉換,直到財務部的大姐問你為什麼本月工資發錯數了),要好吧。
總結
行,服了。
我們還是回到這個世界吧:對byte的操作會得到int的結果。
最後
Raymond Chen的《The Old New Thing》是我非常喜歡的博客之一,裡面有很多關於Windows的小知識,對於廣大Windows平臺開發者來說,確實十分有幫助。
本文來自:《Why do operations on 「byte」 result in 「int」?》
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺「網易號」用戶上傳並發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.