利用聯合體完成一些資料處理的問題

2021-06-26 00:45:09 字數 782 閱讀 8502

聯合體的特性之一就是成員共用記憶體,以最大成員的大小開闢空間。

在一些情況下,這個特性也是在其他程式設計技巧中出現的,比如資料型別的強制轉換,

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...