C 隱式轉換問題分析及解決辦法

2022-10-03 16:24:17 字數 957 閱讀 9144

我們先來看下例項**:

#include

#include

using std::cin;

using std::cout;

using std::endl;

using std::string;

int main()

else if (a < b)

www.cppcns.com

else

} return 0;

}解釋:

如果算術運算或關係運算的運算物件有多種型別,需要轉換成同一種型別。

這個涉及到無符號型別的運算物件:

如果某個運算子的運算物件不一致,這些運算物件將轉換成同一種型別。但是如果某個運算物件的型別是無符程式設計客棧號型別,那麼轉換的結果就要依賴機器中各個整數型別中各個整數型別的相對大小了。

像往常一樣,首先執行整型提公升。如果結果的型別匹配,無需進行進一步的轉換。如果兩個(提公升後的)運算物件的型別要麼都是帶符號的、要麼都是無符號的,則小型別的運算物件轉換成較大的型別。

如果乙個運算物件是無符號型別、另外乙個運算物件是帶符號型別,而且其中的無符號型別不小於帶符號型別,那麼帶符號的運算物件轉換成無符號的。如上面的程式中的unsigned int和int,則int型別的運www.cppcns.com算物件轉換成unsigned int型別。如果int型的值恰好為負值,則轉換為unsigned int的數值總數去模後的餘數。也就造成了a < b的奇怪情況。

例如,8位元大小的unsigned char可以表示0至255區間內的值,如果我們賦了乙個區間以外的值,則實際的結果是該值對256取模後所得的餘數。因此把-1賦給8位元大小的unsigned char所得的結果是255。

剩下的一種情況是帶符號型別大於無符號型別,此時轉換的結sblwhd果依賴於機器,如果無符號型別的所有值都能存在在該帶符號型別中,則無符號型別的運算物件轉換成帶符號型別。如果不能,那麼帶符號型別的運算物件轉換成無符號型別。

Windows藍屏分析及解決辦法

計算機因故障導致的藍屏對windows系統來說已經是家常便飯,特別是vista之前的系統。藍屏後出現的一堆資訊及錯誤 對於非專業使用者來說,幾乎起不到任何作用,很多人在這種情況下都選擇了將系統重灌。雖然藍屏很讓人頭疼,但也不必過於擔心,其實微軟為我們地提供了其解決辦法。對於系統藍屏,可通過memor...

C 死鎖及解決辦法

死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。例如,如果執行緒a鎖住了記錄1並等待記錄2,而執行緒b鎖住了記錄2並等待記錄1,這樣兩個執行...

margin疊加問題及解決辦法

css外邊距 margin 重疊問題 兩個或多個毗鄰的普通流中的塊元素垂直方向上的 margin 會摺疊 外邊距重疊是指兩個垂直相鄰的塊級元素,當上下兩個邊距相遇時,其外邊距會產生重疊現象,且重疊後的外邊距,等於其中較大者。同理,如果乙個無內容的空元素,其自身上下邊距也會產生重疊。防止外邊距重疊解決...