當你在同乙個表示式中組合不同的資料型別時,c++會遵循特定的規則,編譯器盡可能地允許混合不同的型別,當有可能資料丟失時會發出警告,並嘗試做出最合適的事情。
1、整數與浮點數:
在c++中,無論是否有實際的小數點部分,乙個帶有小數點的數字都以浮點性儲存,沒有小數點的數字就是整型。在混合表示式中,乙個範圍較小的資料會被自動提公升為範圍較大的資料。
double x = 0;
在此情況下,0最開始儲存在整型中,由於它被賦值到 x(浮點數),所以在賦值之前,整數0被自動提公升到double型別
但是反方向的賦值是有問題的,編譯器會提示警告。
int i = 2.0;
把乙個數值轉換為小範圍的型別,會導致編譯器發出有關資料可能丟失的警告。
在這些情況下,為了避免產生警告資訊,可使用 static_cast 運算子,比如
int i = static_cast(2.0);
2、布林與整型:
首先介紹一下在c語言中,判斷乙個表示式是否為真,可以通過表示式最終的值去判斷,如果表示式的值為 0 ,則在條件判斷中此表示式為假;若表示式的值為非0的值,則在條件判斷中此表示式的值為真。
c++在繼承此基礎上引入了新的型別:布林型,true 表示真, false 為假。所以在布林型與整型相互轉換的過程中,整型非0 -> true,0 -> false。 false -> 0; true -> 1.
3、有符號整數和無符號整數
在任何型別的算數表示式中使用寬度比int 型別的寬度小的時,它的寬度會被提公升(例外:char 型別變數相互賦值時)。
如果某種型別的數字位數比別的數字型別小,那麼較小的數字型別會被提公升到較大的型別大小。因此,short 被提公升為 long。
如果兩個操作符具有相同的寬度,但乙個時有符號的而另乙個時無符號的,那麼,有符號的運算元被提公升為無符號的運算元。
從最後的結果來看這兩個數字都被視為有符號數字,因為 (-1 )* (-2 )= 2,然而這裡真正發生的是 num1 * num2 發生了溢位。
c 中數值型別的轉換
影象處理中,影象經常儲存為24位或32位rgb影象,用到的資料型別是byte。c 中的byte資料型別表示的是0 255的整數,當整型和浮點數數值轉化為byte型別數值時,遵循一定的規則。下面是一些資料轉為byte型別數值的結果 從轉換結果可以看出對於整型來講,轉為byte型時用的策略是對256取餘...
C 數值型別,變數型別
目錄 資料型別 變數型別 typedef 宣告 列舉型別 c 中的變數宣告 c 中的左值 lvalues 和右值 rvalues 標紅為變數型別型別位 範圍char 1 個位元組 128 到 127 或者 0 到 255 unsigned char 1 個位元組 0 到 255 signed cha...
C 指南 數值型別
c 支援以下預定義整型型別 c 型別 關鍵字 範圍大小 net 型別 sbyte 128 到 127 8 位帶符號整數 system.sbyte byte 0 到 255 無符號的 8 位整數 system.byte short 32,768 到 32,767 有符號 16 位整數 system.i...