聯合體的特性之一就是成員共用記憶體,以最大成員的大小開闢空間。
在一些情況下,這個特性也是在其他程式設計技巧中出現的,比如資料型別的強制轉換,
int t;
char c=(char)t;
不管資料型別怎麼轉換,都表示同一段**在同一段記憶體,這個和聯合體是相似的,比如在乙個例子中,要解決浮點數的正負判斷,一般可能就是直接利用if語句使浮點數和0進行比較,但是這是有風險的,記得之前有個問題如下
#includeint main()
對不不同型別的資料盡量不要去加減比較,為了避免這個問題,我們可以使用聯合體解決一些問題。還是判斷浮點數的正負問題,
typedef union comparecomp;
給出這樣乙個聯合體定義這樣就不存在人為的進行型別轉換了。如下為測試**:
#include#includetypedef union comparecomp;
int main()
結果為:
1.2 positive
-1.2 negtive
聯合體在linux2.6核心中也有目前看到的乙個用途----程序記憶體棧
union thread_union
;struct thread_info
這樣做的目的,目前理解為對棧的大小可控,因為thread_size是可改變的,在編譯核心時。 聯合體 結構體的一些整理
聯合體 採用 little endian 模式的cpu 對運算元的存放方 式是從低位元組到高位元組,而 big endian 模式對運算元的存放方式是從高位元組到低位元組。例如,16bit 寬的數0x1234 在little endian 模式cpu 記憶體中的存放方式 假設從位址 0x4000 開...
資料處理的一些方法
1 保留小數點後兩位 四捨五入alert num.tofixed 2 2 保留小數點後兩位 把後面捨去math.floor 15.7784514000 100 100 輸出結果為 15.77 yuantocent yuan yuantocent 5.55 100 呼叫時需要除以100之後數值才是對應...
資料處理 一些比賽中通用的函式
這篇文章主要記載一些非具體化的函式操作,以及一些加速,壓縮等可用可不用的函式,具體到專案的資料處理函式詳情見其他文章。def reduce mem usage df,verbose true numerics int16 int32 int64 float16 float32 float64 sta...