c語言的一些機制,都是為了節約空間

位操作,按位 與,或,求反,左移,右移

c語言的一些機制,都是為了節約空間

位元組跳動以位元組命名

無法就是為了 讀取或者 修改一個單一位元的資訊,不影響其它位元。

位元組跳動 以位元組命名。

不是位元跳動。

實際上,計算機處理資訊,也是以位元組為單位的。

那按整位元組 計算 加減乘除 都沒有問題。

為什麼要一位元,一位元操作呀。

使用者程式中一個布林型變數,至少佔一位元組吧,

為了省空間,好幾個布林型變數共用一個位元組,不值得。

多佔用的程式空間,都比省下的空間大。

那什麼場合會用到位操作呢?

比如說,要組一個網路包,發出去。

網路包 的格式,都是按空間最省 制定的。

每一個位元都被利用了。

這時候,就會用到位操作,來設定和讀取單一位元的值。

還有 裝置驅動程式,和晶片介面。

晶片控制暫存器介面定義,也是精確到每個位元,

所以寫驅動程式,也需要經常用到 位操作。

共同體 這種 c 語言機制,用到的地方,遠遠不如 結構體多。

好多人 不熟悉。

你說,本來兩種資訊,為什麼要共用一個空間呢?

現在 計算機 動不動 8g 記憶體,稀罕這幾個位元組嗎?

還是和 硬體晶片 介面的問題。

有的晶片暫存器,一個地址,在不同情況下,表示不同的意思。

這時候,驅動程式,就要用共同體 來適應這種情況。

再說位段,你說 表示個 數字,要不一位元組,要不兩位元組,它偏偏不在完整位元組邊上,

偏偏 搞個 5位元,13位元 來表示個數字,

這不奇怪嗎? 沒佔全的位元,它空下不香嗎?

還是 晶片 暫存器 的定義問題。

有的 晶片 暫存器 就是 這樣定義的。

一份暫存器16位元,前13位元表示一個數字,剩下的三位元 表示 另外的意思。

學一些課程,先介紹它的應用背景,就容易理解。

先不介紹應用背景,

直接介紹過程。

初學者 就會 覺得 這塊知識 非常繞。