C 內建型別強制轉換

2021-08-19 15:49:11 字數 979 閱讀 6185

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...