1. 程式人生 > >【雜談與亂碼】作業系統和二進位制

【雜談與亂碼】作業系統和二進位制

【雜談與亂碼】作業系統和二進位制

本人(ID:蒸發傑作)旗下所有文章均放棄版權,請任意使用。只是如果您覺得,看了我的文章,有所收穫的話,不妨點個贊,寫個評論。這是對我最大的支援。

​ ——雜談與亂碼,都是戲言。

要當個好程式設計師,首先也當個好的哲學家。

首先,談談兩個東西。

資料結構?

第一個是廣為人知的,頻繁出現於C語言考題的萬能公式:程式=資料結構+演算法。新手一般都看不懂這句話,或是自以為看懂了這句話。等到他們學到資料結構的時候,感慨資料結構的強大之後,又會感慨這個公式的強大。然後就想當然的認為這個公式中的資料結構說的就是每個計算機學院在大二開設要掛上不少人的那個資料結構。

答案當然是——WBNT(wrong,but not too|錯了但不離譜)

資料結構就像是程式語言的數學一樣,特化部分結構,抽象這些過程,併為每種結構提供對應的演算法。之後每個二流的程式設計師也可以在公開場合宣稱自己是研究過各類排序,樹/圖結構的API鬥士了。

這種特化帶來了好處。

使你多掌握了幾個拗口,但厲害的名詞。

也帶來了壞處,忽略了一般特性。

例如,最基本的都不需要用圖,或樹進行任何抽象的結構。——線性結構。例如最常見的用二進位制位元組流表示圖片。

同樣的,我們也完全可以來自定義我們的結構。如,用二進位制位元組流來表示成語。來儲存特定的訊息流。反應到作業系統上,就加一個特定的字尾,如成語,我就加一箇中文的 *.成語 字尾。

作業系統

開啟檔案的時候,作業系統幹了什麼?

開啟文字檔案的時候,作業系統,將二進位制碼翻譯成了對應文字。圖片檔案的時候,作業系統將二進位制碼翻譯成了對應圖片。

這一切靠識別檔案的字尾名來完成。你可以將一個圖片用記事本開啟,顯示的結果是有趣的,你會得到中文漢字。這說明關於圖片的哪些個二進位制碼被記事本翻譯成對應的漢字了。

這便是最簡單封裝。

現在很多人會開啟檔案,讀取檔案,而一到圖片或者是視訊或者是什麼其他檔案就一下傻的要命,就啥也不會幹了。

windows系統下是不提供直接基於二進位制修改檔案的方法的,偉大的不朽的全能的微軟公司認為這是不好的。但一些簡單的程式設計處理使我們可以完成這點。

例如我們可以開啟VS或者類似的軟體。開啟檔案,開啟方式選擇以二進位制方式開啟。(百度一下你就知道)

得到如下的截圖:

1546096773080

當時我們學習C語言的時候,各種進位制學的歡騰,但最大的敗筆就在於完全不用。純粹為了學而學習,學的就是一堆佔用我們思考空間的垃圾。被垃圾填滿的是什麼,當然也是垃圾場,僅此而已。你和我,都是。

一個1或者0構成一個bit;2^8=256,可以表示ASCII碼對應下對英文友好的所有字元;因而定8bit=1byte位元組;

這個txt的內容就是123,資訊內容佔三個位元組。(佔用空間為0我實在不知道什麼原因,推測可能是系統自動塞在了其他程式的縫隙之間吧)由此可見,.txt的是沒有用額外的資訊來記錄這串文字用什麼編碼的。因而,編碼只能靠記事本來猜測。

碰到有多種編碼方式的中文的時候,他經常猜錯。這時候就需要我們認為的去設定編碼方式了。

1546097366392

而對於另外一些文件,其本身是自描述的。既用一部分空間儲存編碼或者結構組織方式,又用一部分空間儲存資訊。耗費更多空間,但解決很多相容性問題。

下次我們可以談談那些個常用的編碼方式和他們的歷史,在我不醉的時候

回到上上圖,123是顯示的資訊,00000000是地址位置。每一位都是進位制的,8(個位置)*8(一個位元組8bit)=64位。如果一個64位放不下的話的話。就是像下邊這樣的。

1546098415216

至於後邊的數字,就是十六進位制而已。

開啟一個影象不也開啟的都是這些麼?

學會對bit進行操作的程式設計師才是好的而程式設計師。在過去的時代,C語言擅長做這點,但在現在這種底層封裝原來越完善,分工越來越明確的年代。很多開發成員完全不碰底層。

而結果一般是很明顯的,不碰底層,就只能做API鬥士。希望我能避免寫程式=用函式的局面。

最後的最後

好了。我發完我的牢騷了。也到了該安息的時候了。

我如此總結道今天的內容:封裝提高效率,但扼殺更好的封裝。

你覺得上面那句話太玄了也沒關係,可能下面這句話更加適合你。

計算機=協議(或者叫API)+二進位制

請記住,只會處理文字的各位大師們啊,處理影象和處理視訊以及其他一切事物的方法都是一致的,本質就是理解其結構(而這個是由其設計者給出的,本質上就是一份協議),然後操作二進位制,罷了。

也許明天我酒醒後會補一份PYTHON做影象轉換的程式的。