我讀這個鏈接位域操作弊
http://dec.bournemouth.ac.uk/staff/awatson/micro/articles/9907feat2.htm
我無法理解從這個鏈接下面的語句,請幫助我瞭解這件事。
程序員只是寫一些宏來移位或屏蔽 相應的位以獲得所需的值。但是,如果數據涉及更長的二進制編碼記錄,則C API會遇到問題。多年來,我有 ,看到許多冗長,複雜的二進制記錄 與短或長整數位域定義設施。 C 將這些比特字段限制爲整數定義變量的子字段,其暗示了兩個限制:首先,該比特字段可能不是以比特爲單位擴大比基礎變量更寬;其次,沒有 位字段應該與基礎變量邊界重疊。複數 記錄通常由填充了位子字段定義的幾個連續的長整數 組成。
符合ANSI標準的編譯器可以自由地實行這些尺寸和對齊 限制,並規定,在依賴於實現的,但 可預測的方式,比特字段如何打包到底層機器 字結構。結構存儲器對齊通常不是便攜式的,但位域存儲器更不如此。
我從這些語句中理解的是,宏可以用來屏蔽左移位或右移位。但是我在腦海裏有這個疑問,爲什麼他們使用宏? - 我認爲,通過在宏中定義它,可以建立可移植性,而不管16位或32位操作系統。這是真的嗎?我無法理解上述語句中提到的兩個缺點.1位字段可能不會更寬2.no位字段應該重疊下層可變邊界
而行,
複雜記錄通常由填充比特的子場的定義幾個連續長整數 的。
什麼,在你看來,是 「C API」?我在哪裏可以找到其中之一? –
@Pete wilson:這些是來自上面的鏈接,我不明白的聲明! – Angus
對!整個報價有些偏離目標並被誤導,或者可能只是表達不好。只要注意可移植性,因爲它涉及字的大小,你會沒事的。換句話說,不要對底層硬件的32位或64位或n位進行任何假設。相反,使用編譯器作者一直在爲您提供的標題。在這個問題的背景下,其中最重要的是limits.h。 –