C語言中的整數自動轉換原則
有符號數與無符號數之間運算問題
以下實驗均在virual c++6中執行通過
這個問題測試是否懂得C語言中的整數自動轉換原則,有些開發者懂得極少這些東西。當表示式中存在有符號型別和無符號型別時所有的運算元都自動轉換為無符號型別。因此,從這個意義上講,無符號數的運算優先順序要高於有符號數,這一點對於應當頻繁用到無符號資料型別的嵌入式系統來說是豐常重要的。
首先進行一個實驗,分別定義一個signed int型資料和unsigned int型資料,然後進行大小比較:
unsigned int a=20;
signed int b=-130;
a>b?還是b>a?實驗證明b>a,也就是說-130>20,為什麼會出現這樣的結果呢?
這是因為在C語言操作中,如果遇到無符號數與有符號數之間的操作,編譯器會自動轉化為無符號數來進行處理,因此a=20,b=4294967166,這樣比較下去當然b>a了。
再舉一個例子:
unsigned int a=20;
signed int b=-130;
std::cout<<a+b<<std::endl;
結果輸出為4294967186,同樣的道理,在運算之前,a=20,b被轉化為4294967166,所以a+b=4294967186
減法和乘法的運算結果類似。
如果作為signed int型資料的b=-130,b與立即數之間操作時不影響b的型別,運算結果仍然為signed int型:
signed int b=-130;
std::cout<<b+30<<std::endl;
輸出為-100。
而對於浮點數來說,浮點數(float,double)實際上都是有符號數,unsigned 和signed字首不能加在float和double之上,當然就不存在有符號數根無符號數之間轉化的問題了。
相關文章
- c語言中資料型別的自動轉換原則C語言資料型別
- c語言中的資料型別的自動轉換原則C語言資料型別
- C語言中字串與整數的相互轉換C語言字串
- C語言中資料型別的自動型別轉換C語言資料型別
- c語言運算過程中的型別自動轉換原則C語言型別
- c語言中返回整數值的長度C語言
- C語言中,四則運算導致資料型別的轉換C語言資料型別
- C 語言整數與字串的相互轉換介紹字串
- C語言中資料型別轉換函式C語言資料型別函式
- 解析C語言中的sizeof (轉)C語言
- C語言atoi()函式:將字串轉換成int(整數)C語言函式字串
- C語言中的命令列引數C語言命令列
- c語言中自動儲存期和靜態儲存期C語言
- 為啥-1大於1,-1乘3卻不等於-3?直到了解C語言自動轉換原則後...C語言
- C語言中的例子--偽隨機數C語言隨機
- 在C語言中引入類的概念(轉)C語言
- c語言字串,數字轉換C語言字串
- SQL語句效能調整原則(zt)SQL
- R語言中如何將科學計數法轉換為數值型R語言
- C語言中的 static變數、static函式C語言變數函式
- 輸出C語言中 變數的型別C語言變數型別
- c語言中的變數儲存區域C語言變數
- C語言中的#和##C語言
- 【轉】C語言中 -> 是什麼意思?C語言
- 字串轉換整數(atoi)字串
- 轉換成為整數
- C語言“字串-數字”之間的轉換C語言字串
- c語言中的&的用法C語言
- 劍指offer——把字串轉換成整數C++字串C++
- C語言中sync()C語言
- C語言中有C語言
- 解析C語言中的sizeofC語言
- C語言中extern的用法C語言
- C語言中&&,||,&,| 的區別C語言
- c語言中的作用域C語言
- 將整數轉換成字串字串
- 【C】 30_C語言中的字串C語言字串
- 【C語言】編寫一個函式,將一個數字字串轉換成該字串對應的數字(包括正整數、負整數)。C語言函式字串