歷史問題
大家都知道計算機這東西是洋鬼子搞出來的,他的底層實現是二進制。也就是說,計算機里面,二進制,簡簡單單的0和1可以表示世間萬物,可以創造世間萬物。
一生二,二生三,三生萬物。
不知道創造者是否參考過我大中華博大精深的文化。
位
這里說的位就是指的二進制位了,也就是說的0或者1。他們都可以表示一位。英文名就是bit了。
字節
字節其實就是一個單位,我們通過單位知道文件的大小。這就好比你上菜市場賣肉的時候問店家豬肉多少錢一斤一樣,在計算機的世界里面,我們經常會問豬肉多少錢一字節。如果你知道一斤豬肉大體上有多大,夠炒幾個菜。那么你就大概了解一字節的文件大體上有多大,能裝的下幾個字兒了!
其實,我們平時接觸的比較多的是M,K還有G。是吧?
其實,他們都是計量單位。字節的英文表示為byte(為什么我輸入byt的時候,搜狗給我提示的避孕套呢?)。他們之間的轉化關系如下:
- 1G=1024M
- 1M=1024K
- 1K=1024byte
好了,大家清楚他們之間的關系了吧?我們平時的流量套餐呢?1G?大概就是110241024=1048576KB了。假如,我們平時瀏覽一篇文章用20k,看一張圖片用40K,聽一首歌用3M,看一部電影用100M。能用多少流量,大家自己算去吧!
那么,字節和位之間存在關系嗎?
當然存在,只要在計算機的世界里面出現的任何東西,都和位存在關系!
一個字節等于8位。就是說8個0和1的組合表示一個字節。
00000000 11111111 都可以表示一個字節。
字符
字符簡單了!就是我們平時看到的一切字母、符號、中文、法文、日文等等。c是個字符、中也是個字符。
說到字符呢,就不得不說一下編碼格式了。這里只說一下比較常用的編碼格式,其他的編碼格式,大家可以自行百度理解研究。
- ASCII
洋鬼子最早搞出來的編碼格式。該編碼下,一個字符需要一個字節表示,也就是說占8位。這樣的話有256中0和1的組合方式,可以表示256個不同的字母。對于,英文而言就綽綽有余了。 - UNICODE
顯然,洋鬼子在設計ASCII碼的時候沒有考慮到遙遠的東方,存在博大精深的文化。新華字典里面的漢字有多少個?顯然256是遠遠不夠的!那平方呢?65535?夠了吧?還不夠?
這里就說到一個網絡上經常出現的一個問題,UNICODE編碼里面,一個漢字占幾位的問題。很多老程序員會這么說:“一個漢字占兩個字節!”
在GBK編碼里面是2個字節,但是在unicode編碼里面是不對的!其實,很多時候,漢字占幾個自己完全取決于編碼格式。編碼格式也不難寫,因此對于漢字的編碼有多種說法:ubuntu12.04里面一個漢字是三個字節!
它只規定了符號的二進制代碼,卻沒有規定這個二進制代碼應該如何存儲。
如上,unicode編碼的描述。
就是說,在unicode編碼下,一個漢字可能是2個字節,也可能是3個或者是4個字節。
- utf8
該編碼格式我們是不是經常用到呢?
該編碼格式其實是基于unicode。確實,unicode被很多編碼格式拿來做基礎編碼。
在utf8編碼格式下,英文字母占一個字節,和ascii完全相同。
漢字或者是其他字符占1-4個字節。
char
這里我們說一下java中的char類型。
在java中,char類型占2個字節,16位。
可以采取如下方式為char類型變量賦值:
char a='a'; //任意單個字符,加單引號。
char a='中';//任意單個中文字,加單引號。
char a=111;//整數。0~65535。十進制、八進制、十六進制均可。輸出字符編碼表中對應的字符。
注:只能放單個字符。