ANSI C讀書筆記系列之字符集篇----第一章 位 字節 字符

ANSI C 3.3節有關於位bit的定義:

The unit of data storage in the execution environment large enough to hold an object that may have one of two values. It need not be possible to express the address of each individual bit of an object.

位運算有:&按位與,|按位或,^按位異或,~取反,<<左移,>>右移.

在C中自然沒有類似於bit類型,它可以通過位段來定義實現類似的功能.如:

struct data{

    unsigned int a:3;

    unsigned int b:5;

    unsigned int c:2;

}

三個位段佔2個字節(多餘6位).定義位段必須用unsigned int或int類型.有的C編譯系統只允許用unsigned int型.

對位段引用:x.a,x.b,x.c. 允許對位段賦值,但不能超過該位段能存儲的最大值,如佔3位a的最大值爲7,佔2位的c的最大值爲3.

位不要求支持取地址操作.可以如p=&x取得結構體地址,但不能如p=&x.a引用位段的地址.

 

ANSI C 3.4節有關字節byte的定義:

The unit of data storage large enough to hold any member of the basic character set of the execution environment. It shall be possible to express the address of each individual byte of an object uniquely. A byte is composed of a contiguous sequence of bits, the number of which is implementation-defined.

要求對象中的每個字節可尋址.字節由一系列相鄰的二進制位組成,字節包含的位由實現定義.字節通常被作爲計算機信息計量單位.

微型計算機一般1個字節包含8個位,很多人一直都有這個疑問:"爲什麼一個字節是8位"?

這個問題很象"爲什麼一打是12個"一樣,所以簡單的答案就是,這是歷史形成的.

那歷史爲什麼沒選擇1個字節是6位或者10位呢?這是因爲歷史上最早有那麼一羣人認爲他們用8個可以開合的晶體管來組合成不同的狀態就可以表示世界上的萬物.說到這,你一定想到了ASCII碼了.我認爲也是如此,那最早應該是7位更合理啊?選8位估計是預留一位讓這羣人更放心而且8是2的冪次方的緣故了.

當然,現在我們知道,8位肯定不能表示世上萬物了,所以字節只能是構成信息的基本單位了,我們需要多個字節來更好的表現世界. 

ANSI C 3.5 節有關字符character的定義:                                                                  

A bit representation that fits in a byte. The representation of each member of the basic character set in both the source and execution environments shall fit in a byte.

字符是一個字節內能容納的二進制表示.源環境和執行環境的基本字符集中的每個成員的表示都應能被容納在一個字節內.

字符是可使用多種不同字符方案(編碼)來表示的抽象實體.這裏的字符定義是用一個字節編碼實現,字符同樣也有多個字節編碼來實現的.ANSI C 3.13節另外定義了多字節字符multibyte character.

 A sequence of one or more bytes representing a member of the extended character set of either the source or the execution environment. The extended character set is a superset of the basic character set.

多字節字符是由一個或多個字節構成的序列,表示源環境和執行環境的擴展字符集的一個成員.擴展字符集是基本字符集的超集.

字符是指計算機中使用的字母,數字,字和符號等.一組抽象字符的集合就是字符集.

字符集常常和一種具體的語言文字對應起來,該文字中的所有字符或者大部分常用字符就構成了該文字的字符集,比如英文字符集,漢字字符集.

所以,基於字符集可以存儲並表現出現實世界.計算機要處理各種字符,就需要將字符和二進制內碼對應起來,這種對應關係就是字符編碼.編碼其實也就是前面提到的如何用幾位表示世上萬物的問題了.

發佈了38 篇原創文章 · 獲贊 10 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章