→ loveme00835:double 不是 1-11-52 嗎? :) 04/16 04:05
謝謝指正 :)
→ king19880326:單回你 floating 是否能用 bitwise. 答案是否定的 04/16 04:12
→ king19880326:但是你可透過 int pointer type 來對其作 bitwise 04/16 04:13
推 purpose:(unsigned long long)x 這樣會做轉型吧? 1.9 變 1 04/16 04:32
→ loveme00835:的話 windows.h 應該可以找一下 04/16 04:57
這樣的確可行,MSCV 下的 stdint.h 找了一下,發現這裡有
http://msinttypes.googlecode.com/svn/trunk/stdint.h
http://www.azillionmonkeys.com/qed/pstdint.h
這二版都可以正常跑 (目前用沒什麼問題)
推 POSIX:版主都不用睡覺的 o_O 04/16 06:19
推 ledia:f = (unsigned long long) x; 是 cast, 要亂搞的話應該要 04/16 11:10
→ ledia:unsigned long long *i = (unsigned long long *)&x; 04/16 11:10
寫久了頭都暈了, 謝謝 mking19880326, purpose, ledia 指出
不用 union 拿 loveme00835 給的來改的確也可行
http://codepad.org/P6rC8o9Z
推 VictorTom:你的IEEE754不能這樣定義吧?? 這樣定義sign會整個佔掉 04/16 11:34
→ VictorTom:一個整個char(雖然只用其1 bit). 再加上align, 小弟用 04/16 11:35
→ VictorTom:VC2008 sizeof它足足有16 bytes; 要的話bitfield應該是 04/16 11:35
→ VictorTom:從第一個到最後一都用unsigned long long宣告吧@_@" 04/16 11:36
→ VictorTom:糟, 小弟sizeof(ull)也是4byte.Orz 直接__int64才行Orz 04/16 11:41
→ VictorTom:測了一下, 用ull就算32bit也沒關係, 別更換型態就好:) 04/16 11:46
的確,昨晚忽視了 alignment 問題,謝謝指正。
→ firejox:咦 long long 不是跟double一樣大嗎? 04/16 12:01
推 LPH66:可能是比較早的 compiler 認不得 long long 當它是 long 吧 04/16 12:02
→ LPH66:印象中 VC6 就認不得 long long 04/16 12:02
的確,VC6 只能用 __int64 / unsigned __int64 , long long 宣告應是 error
同時 cout / cin 這二支都沒 overloading, 也是我考慮拋棄 vc6 的第一個原因!
推 wowtiger:你的 IEEE754 的 struct 是不是寫相反了 ... 04/16 12:33
真的!已修正, 謝謝指正!
Mantissa / Exp 寫反
→ loveme00835:一個要考慮的事情是 bit field 雖然你 bit 數有數對 04/16 14:32
→ loveme00835:但是整個結構的大小可能過大導致沒有對齊好 04/16 14:33
的確有漏考慮,謝謝 loveme00835 熱心指導與說明!
※ 編輯: tropical72 來自: 180.177.73.222 (04/16 15:02)