例如:c語言中在帶符號資料的運算過程中,若同時存在有符號和無符號變數,則會隱式的將有符號數轉換為無符號數進行運算。其中典型的程式
#include float sum(float a, unsigned length)
return result;
}int main()
; float result;
result = sum(a, 0);
printf("%f\n", result);
return 0;
}
上面這個程式能編譯通過,但在執行時會直接崩潰。
呼叫sum函式時傳入引數
result = sum(a, 0); //陣列長度為零
在sum函式的for語句中
for (i = 0; i <= length - 1; i++)
length-1轉為無符號則為乙個特別大的正整數(隨**執行環境改變),則不斷執行運算,導致陣列越界而程式崩潰
慎用無符號數。個人理解:只需將形參改為有符號數即可
float sum(float a, int length)
return result;
}
C語言無符號數與有符號數的運算原則
int main void return0 啥都不輸出,因為 1 sizeof 返回的是unsigned int型別 2 有符號數與無符號數進行運算時,有符號數先自動轉換成無符號數 因此 i sizeof int 比較時 1會轉換成unsigned int型別,溢位到unsigned int的最大值...
C語言中無符號數和有符號數之間的運算
c語言中有符號數和無符號數進行運算 包括邏輯運算和算術運算 缺省會將有符號數看成無符號數進行運算,其中算術運算預設返回無符號數,邏輯運算當然是返回0或1了。直接看例子來說明問題吧 include using namespace std intmain 輸出結果為 這是因為a和b進行比較的時候,編譯器...
C語言中無符號數和有符號數之間的運算
c語言中有符號數和無符號數進行運算 包括邏輯運算和算術運算 缺省會將有符號數看成無符號數進行運算,其中算術運算預設返回無符號數,邏輯運算當然是返回0或1了。直接看例子來說明問題吧 include using namespace std intmain 輸出結果為 這是因為a和b進行比較的時候,編譯器...