比基礎更基礎的問題 關於二進位制檔案

2021-09-05 13:27:32 字數 883 閱讀 4484

二進位制檔案,這個再基礎不過的名詞,正因為它的無處不在,或許沒有人會關注它背後隱含的內容。其實我也一樣,在寫下這些文字之前,我也是認為二進位制檔案就像空氣一樣,平常得讓人完全忽略了。

很偶然的,今天在寫**的時候使用了fopen函式:

file * fopen (const char * filename, const char * mode)

大家可以看到第二個引數是mode,而這個引數定義了檔案開啟的方式,w、a等都可以做為函式的實參。除此之外,還有兩個值:tb。這兩個值定義了檔案是按照文字(text)還是二進位制(binary)方式開發。正是這個兩個值引起了我對二進位制檔案的興趣,因為它們讓我想到了很多問題。

首先,出現在腦海的第乙個問題是:文字檔案和二進位制檔案有什麼區別呢?我想這個問題並不是每個程式設計師能夠馬上回答上來的,至少我是不行了。查閱了資料之後,發現答案就在自己的知識範圍之內的:將檔案看作是由乙個乙個位元組(byte) 組成的,那麼文字檔案中的每個位元組的最高位都是0,也就是說文字檔案使用了乙個位元組中的七位來表示所有的資訊,而二進位制檔案則是將位元組中的所有位都用上了。這就是兩者的區別;

接著,第二個問題就是檔案按照文字方式或者二進位制方式開啟,兩者會有什麼不同呢?其實不管是二進位制檔案也好,還是文字檔案也好,都是一連串的0和1,但是開啟方式不同,對於這些0和1的處理也就不同。如果按照文字方式開啟,在開啟的時候會進行translate,將每個位元組轉換成ascii碼,而以按照二進位制方式開啟的話,則不會進行任何的translate;

最後就是文字檔案和二進位制檔案在編輯的時候,使用的方式也是不同的。譬如,你在記事本中進行文字編輯的時候,你進行編輯的最小單位是位元組(byte);而對二進位制檔案進行編輯的話,最小單位則是位(bit),當然我們都不會直接通過手工的方式對二進位制檔案進行編輯了。

二進位制基礎

二進位制加法有四種情況 0 0 0,0 1 1,1 0 1,1 1 10 0 進製為1 1011 10101 100000 二進位制乘法有四種情況 0 0 0,1 0 0,0 1 0,1 1 1 和十進位制乘法一樣,從低位開始與全數相乘,然後按二進位制的加法計算。二進位制減法有四種情況 0 0 0,...

二進位制運算基礎

位運算實質是將參與運算的數字轉換為二進位制,而後逐位對應進行運算。按位與運算為 兩位全為1,結果為1,即1 1 1,1 0 0,0 1 0,0 0 0。例如51 5 00110011 00000101 00000001 51 5 1 特殊用法 1 與0相與可清零。2 與1相與可保留原值,可從乙個數中...

二進位制運算基礎

1 十六進製制的表示 例子 0xaa 0x55。將十六進製制表示進行二進位制運算,首先要把十六進製制表示成二進位制。規則是,兩個十六進製制位等於乙個位元組 8個二進位制位 其實就是乙個十六進製制位佔4個二進位制位。對於0xaa中的a為十進位制中的10,用二進位制表示就是1010,所以0xaa用二進位...