我試圖通過附加兩個int
的二進制表示來創建double
。這是我現在有:通過附加兩個整數的二進制表示形成雙重
int i = arc4random();
*(&i+1) = arc4random();
double d = *(double*)&i;
我希望double
指針也將在&i+1
地址使用的價值,這的確是這樣的。當我打印i
和*(&i+1)
的二進制表示形式並將它們與d
的二進制表示形式進行比較時,d由附加*(&i+1)
和i
組成。所以*(&i+1)
第一??爲什麼會這樣?
編輯:也看看胡安加泰羅尼亞和馬克西格爾的答案,知道什麼是做我的工會使用的正確方法。
千萬不要這麼做!通過使用未分配給變量的內存來調用未定義的行爲。 –
[C中雙精度的二進制運算](http://stackoverflow.com/q/20458125)。還要記住,用這個方案你可以生成一個'NaN'。 –
如果你真的需要生成一個NaN,'strtod(「NaN」)'。 'strtod(「inf」)'也很有用。 –