c++ primer寫到有六種型別轉換:
1、非布林型值-》布林:如果初始值為0則為false,否則為true;
2、浮點數-》整數:結果值僅儲存浮點數中小數點之前的部分;
3、整數-》浮點數:小數部分為0,如果整數占用空間超過浮點數容量,精度有損失;
4、超出範圍的值-》無符號型別:對無符號型別取模後的餘數;
5、布林值-》整數型別:false對應0,true對應1;
6、超出範圍的值-》帶符號型別:未定義。
7、短整型-》無符號長整型:未提到
鑑於第6、7種情況表述為未定義,所以用vs2015親自試一下:
第6種:
short int x = 65536;
二進位制10000000000000000
輸出0二進位制 0000000000000000
short int x = 65535;
二進位制1111111111111111
輸出-1
二進位制1111111111111111
short int x = 32768;
二進位制1000000000000000
輸出-32768
二進位制1000000000000000
可見vs2015編譯器對於超出長度的值採用的是簡單的截斷方式。
第7種:
short int x = -32768;
unsigned int y = x;
cout << y << endl;
二進位制1000000000000000
輸出4294934528
二進位制11111111111111111000000000000000
short int x = 32767;
二進位制0111111111111111
輸出32767
二進位制00000000000000000111111111111111
可見vs2015編譯器採取的是填充符號位的方式。
C 強制型別轉換
四種型別可能很多人都常常忽略就象我一樣,但是有時還是比較有用的。不了解的建議看看,一些機制我也不是十分了解,只是將一些用法寫出來讓大家看看。強制轉化無論從語法還是語意上看,都是c 中最難看的特徵之一。但是基於c風格的轉化的語義的不明確性及其一些潛在問題。強制型別轉化最終還是被c 接受了。1.stat...
C 強制型別轉換
標準c 中主要有四種強制轉換型別運算子 const cast,reinterpret cast,static cast,dynamic cast等等。1 static cast a 將位址a轉換成型別t,t和a必須是指標 引用 算術型別或列舉型別。表示式static cast a a的值轉換為模板中...
C 強制型別轉換
關於強制型別轉換的問題,很多書都討論過,寫的最詳細的是c 之父的 c 的設計和演化 最好的解決方法就是不要使用c風格的強制型別轉換,而是使用標準c 的型別轉換符 static cast,dynamic cast。標準c 中有四個型別轉換符 static cast,dynamic cast,reint...