使用ASCII碼的一個重要作用是用來顯示或者標記。以顯示功能來說,一串二進位制的資料都是01010101的序列,要識別序列的含義就需要在讀寫的時候遵循同樣的約定(也就是編碼),讀取這種流式的資料時,首先要從中分段然後把每一小段比照編碼表,這樣才能知道其意義。分段最簡單的方式是定長分段,例如每8個數字(一個位元組)算一段ASCII碼就是這種定長的;還有一種是設定特定字元作為分割符的(傳輸內容中不能有該特定字元,否則需要轉義),在此不討論。既然ASCII碼定長,每個8位digit表示一個字元,那麼用00000001表示字元1好不好呢?當然吼啊,其實隨便用什麼樣的8位01組合都可以的啦。那你又說前面那7個0多浪費,我直接用一個digit 1表示字元1吼不吼啊?不吼啊,因為當我讀到一個1的時候,我如何判斷這個1是自己表示字元1,還是和接下來的7個digit連在一起表示其他的字元呢。那麼用00000001表示1,00000000表示0,00000011表示3,如此首先安排ASCII表中0-9的編碼,吼不吼啊?吼啊,但是好像意義不大而且還有跟此前ASCII編碼的相容性等問題。為什麼最開始的設計就沒有考慮這個呢?可能當時第一版就是拍腦袋的,沒有想到這個吧。綜上,1.ASCII選擇了使用定長編碼,那麼即使是一個數字字元也必須佔用8個digit。2.既然必須使用8個digit,那麼用一個digit表示一個字元0,一個digit表示字元1的想法也是不可能實現的。---以下原答案,不知所云---這個問題要想回答清楚還真是挺難的。嘗試一個角度回答。題主想像了一個場景,當CPU從記憶體讀到0101的一串資料(記憶體資料是從硬碟讀取來的)時,CPU怎麼知道這個是數字01234還是ASCII碼錶裡面編碼的數字?實際上CPU層面根本沒有ASCII的概念,一切都是指令碼和算術邏輯資料。C語言等高階語言中才有數和字元的區分,經過編譯後得到的機器碼中已經沒有了字元的概念。a="3"在編譯後就是在a的位置存上3的ASCII碼,b=3編譯後就在b的位置儲存數字3。後續程式中對ab的使用可能是aa=a+1,bb=b*2;//在aa儲存a的後一個字元的ascii碼,在bb儲存b的2倍。編譯後CPU也不需要知道ab存的是否是ascii碼,只是機械運算即可,結果意義由程式設計師的程式碼邏輯進行保證。正常的程式設計邏輯不可能出現aa=a*2,因為含義不明。這個語句邏輯如果編譯透過,那麼意味著CPU需要把a的ascii碼當成數字乘以2,結果意義同樣由程式設計師的程式碼邏輯進行保證。可見不存在衝突,只存在程式設計邏輯是否正確。
使用ASCII碼的一個重要作用是用來顯示或者標記。以顯示功能來說,一串二進位制的資料都是01010101的序列,要識別序列的含義就需要在讀寫的時候遵循同樣的約定(也就是編碼),讀取這種流式的資料時,首先要從中分段然後把每一小段比照編碼表,這樣才能知道其意義。分段最簡單的方式是定長分段,例如每8個數字(一個位元組)算一段ASCII碼就是這種定長的;還有一種是設定特定字元作為分割符的(傳輸內容中不能有該特定字元,否則需要轉義),在此不討論。既然ASCII碼定長,每個8位digit表示一個字元,那麼用00000001表示字元1好不好呢?當然吼啊,其實隨便用什麼樣的8位01組合都可以的啦。那你又說前面那7個0多浪費,我直接用一個digit 1表示字元1吼不吼啊?不吼啊,因為當我讀到一個1的時候,我如何判斷這個1是自己表示字元1,還是和接下來的7個digit連在一起表示其他的字元呢。那麼用00000001表示1,00000000表示0,00000011表示3,如此首先安排ASCII表中0-9的編碼,吼不吼啊?吼啊,但是好像意義不大而且還有跟此前ASCII編碼的相容性等問題。為什麼最開始的設計就沒有考慮這個呢?可能當時第一版就是拍腦袋的,沒有想到這個吧。綜上,1.ASCII選擇了使用定長編碼,那麼即使是一個數字字元也必須佔用8個digit。2.既然必須使用8個digit,那麼用一個digit表示一個字元0,一個digit表示字元1的想法也是不可能實現的。---以下原答案,不知所云---這個問題要想回答清楚還真是挺難的。嘗試一個角度回答。題主想像了一個場景,當CPU從記憶體讀到0101的一串資料(記憶體資料是從硬碟讀取來的)時,CPU怎麼知道這個是數字01234還是ASCII碼錶裡面編碼的數字?實際上CPU層面根本沒有ASCII的概念,一切都是指令碼和算術邏輯資料。C語言等高階語言中才有數和字元的區分,經過編譯後得到的機器碼中已經沒有了字元的概念。a="3"在編譯後就是在a的位置存上3的ASCII碼,b=3編譯後就在b的位置儲存數字3。後續程式中對ab的使用可能是aa=a+1,bb=b*2;//在aa儲存a的後一個字元的ascii碼,在bb儲存b的2倍。編譯後CPU也不需要知道ab存的是否是ascii碼,只是機械運算即可,結果意義由程式設計師的程式碼邏輯進行保證。正常的程式設計邏輯不可能出現aa=a*2,因為含義不明。這個語句邏輯如果編譯透過,那麼意味著CPU需要把a的ascii碼當成數字乘以2,結果意義同樣由程式設計師的程式碼邏輯進行保證。可見不存在衝突,只存在程式設計邏輯是否正確。