標籤:android os java io 檔案 for ar 資料 問題
資訊是一個很寬泛的概念,說大了是與物質和能量鼎立的自然界三要素,這裡僅僅涉及到電腦中的資訊;
眾所周知,對電腦自身而言,所有資訊都是0/1二進位形式;
作為JavaEE/Android程式員,在開發過程中有時會遇到字元編碼,進位轉換這樣的基礎問題,雖然依靠經驗或者網路搜尋能很快實現功能,但每次都感覺對基本概念理解得不是很透徹,不如把現有的理解記錄下來,以備後用;
資訊在電腦中大致分為控制資訊和資料資訊;
控制資訊是電腦系統內部運轉用到的控制命令,例如讀寫命令,中斷訊號,片選訊號,複位訊號,就緒訊號等;當然都是二進位表示;
資料資訊指電腦可運算、可儲存、可傳輸、可採集、可輸出的各種資料;可分為數值資料,文本資料(字元,字串),多媒體資料(映像,音頻,視頻),位元據(可執行檔等);
電腦資訊的表示跟資訊的處理,傳輸,儲存,輸入/輸出一樣,是電腦系統最基本的功能之一;
電腦中的資訊表示可分為硬體系統可直接表示的資訊,和軟體系統可表示的資訊;後者如資料結構,資料庫表結構,XML/Json結構等等;
這裡,只討論電腦硬體系統對資訊的表示;
位,Bit,Binary digit的縮寫,是電腦中資訊表示的最小單位;跟電子電腦的“電子”有關,高低電平;
位元組,Byte, 8Bit, 可表示一個英文字元ASCII碼;跟電腦的發明國美利堅所用語言有關;
定點數,小數點位置固定不變;定點小數的小數點緊跟符號位之後;定點整數小數點在有效數值部分之後;
浮點數,小數點位置可以浮動;尾數,階碼,底數;尾數位元越多,所表示數值的密度越大,精度越高;階碼位元越多,所表示數值的範圍越大;
無符號數,全部二進位位均表示數值位;
有符號數,最高位被用來表示符號位;
機器數,一個數的二進位表示形式,最高位表示符號;
真值,機器數代表的真正數值;
原碼,符號位加上真值的絕對值;
反碼,正數的反碼與其原碼相同,負數的反碼是對其原碼逐位取反,符號位除外;
補碼,正數的補碼與其原碼相同,負數的補碼是在其反碼的末位加1;
在電腦中,數值一律採用補碼錶示;
補碼設計目的:
-使符號位能與有效值部分一起參加運算(自動溢出),簡化運算規則;
-使減法運算轉換為加法運算(同餘,模數,A-B 等於 A+B的補碼),簡化電腦中運算器的線路設計;
溢出,計算得出的數值超出了整數類型可以表示的數值範圍;
進位,進位主要包含基數和位權兩個因素;電腦常用的是二進位,八進位,十六進位;
N進位轉換成十進位,按權求和;
十進位轉換N進位,整數部分-除N取餘,小數部分-乘N取整;
一般可藉助二進位或十進位做中間轉換;
具體的轉換原理和演算法及程式實現在另外的文章再做介紹;
(todo 補碼運算和浮點數運算)
字元編碼和字元集:
ASCII-American Standard Code for Information Interchange. 1bit+7bit; 英文字元編碼,老美出品,第一個bit為0,可表示128個字元;擴充集第一個bit為1,加起來
表示256個字元;
這對於非英語國家特別是亞洲國家的文字表示是遠遠不夠啊,於是各國開始擴充自己的字元集;各自擴充的結果就是互不相容;同一個二進位串在不同語言國家表示不同字元;
於是出現了偉大的萬國碼Unicode,可統一表示世界上所有國家的文字; Unicode僅僅給出了字元的編碼值,這些值在電腦中具體怎麼表示是由UTF來實現的;
具體有:UTF-8/UTF-16/UTF-32;
UTF-8用可變長度(1-6)位元組表示Unicode值,UTF-16用2位元組或4位元組表示Unicode值;UTF-32用4位元組表示Unicode值;
既然是可變多位元組表示,為了避免歧義,就要指明位元組的長度和順序(BOM);
UTF-8 encoding scheme:
for 1 byte unicode character: the first bit is 0, the rest 7 bits are the unicode value of the character;
for n byte unicode character: the first n bits of the first byte are 1, and the n+1 bit is 0, the first 2 bits of the rest bytes are 10, and all the rest bits are the
unicode value of the character;
Unicode符號範圍 | UTF-8編碼方式
(十六進位) |(二進位)
------------------------------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
其它字元編碼還有:
UCS-Universal Character Set: UCS-2(16bit), UCS-4(32bit),
EBCDIC-Extended Binary Coded Decimal Interchange Code:8bit.
ISO 8859: 8bit,
GB2312:16bit, 94區*94位, 簡體中文.
BIG5: 16bit, 繁體中文.
關於big-endian(FEFF)和little-endian(FFFE):
big-endian: the higher(most significant) byte stored in the lower memory address.
little-endian: the lower(least signaficant) byte stored in the lower memory address.
BOM-Byte Order Mark,ZERO WIDTH NO-BREAK APACE,FFFE,
(todo 多媒體資訊表示,圖形,映像,動畫,音頻,視頻,虛擬現實)
簡單理解資訊在電腦中的表示