復合賦值運算子 計算的結果一定正確嗎?

2021-09-06 22:52:53 字數 400 閱讀 4855

接下來是計算 s1  和 s2 的 和值,會發現第乙個方法的計算結果為負數,第二個是正確的。

@test

public void test13()

但是把**稍微修改下結果就正確了

@test

public void test12()

解釋下原因:

因為在執行 s1+=s2時,由於計算結果超出了 short 的取值範圍,所以自動將高位截掉,因而產生了錯誤的結果。

強制:對於上面的示例,如果將 s1+=s2; 改為 s1 = s1 + s2; 這樣程式在編譯時就會報錯,因此就不會產生上面的 錯誤結果了。

因此,在使用復合賦值運算時,一定要特別小心,如果上面的示例是計算的金額,損失可就大了。

復合運算子可能產生的結果

原題 c語言程式設計 現代方法,第四章練習題10.表示式 i i 共有多少種可能的值,假設i初始值為1 影響結果的因素 雙目運算子的兩個運算元表示式優先順序沒有在標準c中定義,所以,針對不同實現 不同的編譯器 可能會產生不同結果 字尾自增運算子的運算機制 標準c沒有定義字尾自增運算子具體的運算時機,...

運算子過載 賦值運算子的過載

有時候希望賦值運算子兩邊的型別可以不匹配,比如,把乙個int型別變數賦值給乙個complex物件,或把乙個 char 型別的字串賦值給乙個字串物件,此時就需要過載賦值運算子 注意 賦值運算子 只能過載為成員函式 賦值運算子過載例項示例 include include using namespace ...

運算子過載 類的賦值運算子過載

下面介紹類的賦值運算子 1.c 中物件的記憶體分配方式 在c 中,物件的例項在編譯的時候,就需要為其分配記憶體大小,因此,系統都是在stack上為其分配記憶體的。這一點和c 完全不同!千 萬記住 在c 中,所有類都是reference type,要建立類的實體,必須通過new在heap上為其分配空間...