上一期提到:隱式型別強制轉換 (implicit type coercion)。隱式型別強制轉換會造成意外。
為了避免出現意外,c++提供了明式型別轉換,允許程式設計師通過使用型別轉換操作 (cast operator)主動轉換資料的型別。
型別轉換操作也可直接稱為型別轉換 (type conversion/type casting)。
型別轉換有兩種格式:
static_cast形式會更加穩定。
再來看之前那個5除以2再加1.5的例子。
因為先算括號內的,先5除以2,又根據除號兩邊都是整數,所以得到的結果是整數的,得到的結果再進行的casting,所以是把整數結果2轉化成了double形式,就是2.0。
正確的思路應該是先把5和2這兩個中的至少乙個整數轉化成了浮點數,再進行除法。
目前要注意一點,小數點後只有0的浮點數的預設輸出形式會省略小數點和小數點後的0,後面某期會講怎麼告訴計算機浮點數的輸出格式,比如保留小數點後幾位。
bool 轉 int:
甚至能參與運算,雖然不知道什麼情況會用上。
int 轉 bool:
由上圖猜測,只有1和0能正常轉換,其他整數一律轉換成 true,也就是1。依舊是不知道有什麼邏輯的用法。
int 轉 char:
ascii 除了0到127,後來還進行了一次擴充套件,有了128到255的字元。
簡單地說就是需要先把那個整數換成16進製制,再捨棄高位位元組保留低位位元組,再把低位部分根據ascii找到對應的char。
由於我是個懶人,不愛轉換,太麻煩了!雖然不是我換算,所以我找到了另乙個思路。
首先char是個只有4個位元組的資料型別,4個位元組最大就是255,用整數除以255得到的餘數再對應 ascii 就是對應的char。
float/double 轉 char:
然後我嘗試在d += 0.1的0.1後面加了個f:
簡單的查了一下這個f和加這個f的意義,還是沒很明白,反正就有說f就是float,加f就表示是float型別,不然會預設為double型別。我加f純屬是在隔壁寫c#指令碼的時候習慣的。
總之,我推測在浮點數轉 char 上,會隱式型別強制轉換把浮點數轉換成整數再轉換成char型別。
java 型別轉換 強制型別轉換
今天在寫乙個demo時,碰到型別轉換問題。發現兩個不相干的class進行強制型別轉換編譯是不會通過的,但是。乙個class到乙個不相干的inte ce強制型別轉換是可以編譯通過的。可能有人感覺知道這沒什麼意義,但是感覺還是記錄下。雖然有自動型別轉換,以及強制型別轉換,但有時強制型別轉換不能通過時,可...
JS 型別轉換 強制型別轉換
js 型別轉換 強制型別轉換 一 parseint 將其他型別轉換成number型別的整數 注意 string number 1 字串中值的首字元必須是數字,轉換後才能得到具體的值 否則得到nan 2 只轉換從首字元開始的連續數字 如 2b345 轉換後只得到2 3 除了string,其他型別轉換後...
強制型別轉換
關於強制型別轉換的問題,很多書都討論過,寫的最詳細的是c 之父的 c 的設計和演化 最好的解決方法就是不要使用c風格的強制型別轉換,而是使用標準c 的型別轉換符 static cast,dynamic cast。標準c 中有四個型別轉換符 static cast dynamic cast reint...