C語言有無符號資料運算錯誤

2021-08-03 00:24:41 字數 831 閱讀 6212

例如: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進行比較的時候,編譯器...