(int&)a是什么意思


在《程序員面試寶典》有這樣一道題目:

#include <iostream>
#include <string> 

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{

	float fa = 1.0f;
	cout<<&fa<<endl; //0x0012ff60
	cout<<(int)fa<<endl;   //1
	cout<<(float&)fa<<endl;//1
	cout<<*((float*)(&fa))<<endl;//1
	cout<<(int&)fa<<endl;//1065353216
	
	return 0;
}

 里面出現了一個很奇怪的輸出形式就是(int&)a.

其實,(int&)a就是*(int*)(&a)

  1. 首先對float型變量取地址
  2. 強制類型轉換為整型變量的地址(地址的值並沒有變)
  3. 將該地址指向的變量輸出(但是由於整型和浮點型數據存儲方式的不同,輸出結果是不同的)

下面說一下整型變量和浮點型變量的存儲區別:

 

 

下面以浮點數125.5為例來說明:

125二進制表示形式為1111101,小數部分表示為二進制為 1,則125.5二進制表示為1111101.1,由於規定尾數的整數部分恆為1,則表示為1.1111011*2^6,階碼為6,加上127為133,則表示為10000101,而對於尾數將整數部分1去掉,為1111011,在其后面補0使其位數達到23位,則為11110110000000000000000

則其二進制表示形式為

0 10000101 11110110000000000000000,則在內存中存放方式為:

  • 00000000   低地址
  • 00000000
  • 11111011
  • 01000010   高地址

 

-------------------------------------------------------------

對於將一個浮點型數據(double)賦值給整型數據(int)是怎樣截斷的?

float fa = 1.0f;

cout<<(int)fa<<endl;//1

所以只保留低位的數據

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM