型別轉換(某面試例題)
題目來源:《程式設計師面試寶典(第五版)》
參考博文:
float a = 1.0f;
cout < < (int)a < < endl;
cout < < (int&)a < < endl;
cout < < boolalpha < < ( (int)a == (int&)a ) < < endl; // 輸出什麼?
float b = 0.0f;
cout < < (int)b < < endl;
cout < < (int&)b < < endl;
cout < < boolalpha < < ( (int)b == (int&)b ) < < endl; //
答案:false true 或 0 1
分析:
(int&a)與*((int*)&a)等價;&a則是a的記憶體地址的二進位制表示
(int)a實際上是以浮點數a為引數構造了一個整型數,該整數的值是1。
(int&)a則是告訴編譯器將a當作整數看(並沒有做任何實質上的轉換)。
因為1以整數形式存放和以浮點形式存放其記憶體資料是不一樣的,因此兩者不等。
對b的兩種轉換意義同上,但是0的整數形式和浮點形式其記憶體資料是一樣的,因此在這種特殊情形下,兩者相等(僅僅在數值意義上)。