最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言中的BYTE和char深入解析

 更新時(shí)間:2013年10月08日 09:22:51   作者:  
在C語(yǔ)言中,字符(character)這個(gè)術(shù)語(yǔ)具有兩個(gè)層次上的含義:書寫源程序的字符和程序處理的字符

例如,在下面的源程序中“""”之內(nèi)的“你”、“好”、“,”、“C”、“!”、“\n”就屬于程序要處理的字符。

復(fù)制代碼 代碼如下:

#include <stdio.h>
int main(void)
{
      printf("你好,C!\n");  
      return 0;
}   

該源程序中的其他字符則屬于書寫源程序的字符,這其中也可能包含并沒有明顯顯示出來(lái)的字符,例如空格字符(space character)、水平制表符(horizontal tab)、垂直制表符(vertical tab)和換頁(yè)符(form feed)。

從某種意義上來(lái)說(shuō),編輯/編譯器是一種接受字符輸入,輸出可執(zhí)行文件的軟件,由它產(chǎn)生可執(zhí)行文件經(jīng)過(guò)加載成為內(nèi)存中的程序,這個(gè)程序通常也不可避免地要處理字符。

編輯/編譯器與它生產(chǎn)出的應(yīng)用程序并不一定運(yùn)行在同一個(gè)環(huán)境中,這就意味著兩者可能要各自處理不同的字符集合。

編輯/編譯器所要處理的字符就是書寫C語(yǔ)言源程序所用的字符,這種字符的集合叫源字符集(sourcecharacter set)。而應(yīng)用程序要處理的字符所構(gòu)成的集合叫執(zhí)行字符集(execution character set)。

對(duì)于多數(shù)C語(yǔ)言學(xué)習(xí)者來(lái)說(shuō),由于編輯/編譯環(huán)境與應(yīng)用程序運(yùn)行環(huán)境是重合的,可能意識(shí)不到源字符集與執(zhí)行字符集之間的區(qū)別。

•源字符集(source character set)
源字符集中的字符就是編寫C語(yǔ)言源程序的字符,也就是C語(yǔ)言要求編輯/編譯器所運(yùn)行的環(huán)境所提供的字符。這套字符由這幾部分組成:基本字符集(basic character set)、表示換行的字符(new-line character)和擴(kuò)展字符(extended characters)。

基本字符集(basic character set)包括:

A B C D E F G H I J K L M

N O P Q R S T U V W X Y Z

a b c d e f g h i j k l m

n o p q r s t u v w x y z

0 1 2 3 4 5 6 7 8 9

! " # % & ' ( ) * + , - . / :

; < = > ? [ \ ] ^ _ { | } ~

空格(space character)

控制符:horizontal tab, vertical tab, form feed

一共是95個(gè)。這就是C語(yǔ)言對(duì)編輯/編譯器運(yùn)行環(huán)境的最基本的要求,言外之意就是只要編輯/編譯器所運(yùn)行環(huán)境提供這95個(gè)字符就可以編寫C語(yǔ)言程序了。事實(shí)上C語(yǔ)言源程序也“主要”地由這95個(gè)字符組成。

此外,C語(yǔ)言還要求在編輯/編譯器運(yùn)行的環(huán)境中,0~9這十個(gè)字符的編號(hào)(編碼)必須是連續(xù)的。

遺憾的是,有些環(huán)境無(wú)法全部提供這95個(gè)字符。例如,據(jù)說(shuō)有些國(guó)家的鍵盤上壓根就沒有“[”這個(gè)鍵。

由于存在這種情況,所以C語(yǔ)言也容許用所謂的三字符序列(trigraph)來(lái)表示那些環(huán)境不提供的字符。比如用“??<”表示“{”,用“??>”表示“}”。下面的代碼盡管看起來(lái)有些怪異,然而依然是合法的C程序。

復(fù)制代碼 代碼如下:

#include<stdio.h>
int main(void)
 ??<
      printf("你好,C!\n");  
      return 0;
 ??> 

編譯器也可以對(duì)基本字符集自行進(jìn)行擴(kuò)展,這就是所謂的擴(kuò)展字符(extended characters)。前面代碼中的“你”、“好”就屬于擴(kuò)展字符。這些擴(kuò)展字符只能出現(xiàn)在標(biāo)識(shí)符、字符常量、字符串字面量、頭名(header name)、注釋以及某些預(yù)處理單詞(preprocessing token that is never converted to a token)中。代碼的其他其他部分出現(xiàn)擴(kuò)展字符則是一種未定義行為。

擴(kuò)展字符的值是由具體的編譯器定義的。源程序可以使用的所有字符的集合叫做擴(kuò)展字符集(extended character set)。

•執(zhí)行字符集
應(yīng)用程序運(yùn)行的環(huán)境中的字符集(the execution character set)也是一種擴(kuò)展字符集(extended character set)。

其中也必須包括前面提到的源字符集中的那95個(gè)基本字符集,0~9這十個(gè)字符的編碼也必須是連續(xù)的。

特別需要注意的是,C語(yǔ)言并沒有要求執(zhí)行環(huán)境中的基本字符集和編輯/編譯環(huán)境中的基本字符集具有相同的編碼方式,盡管這兩個(gè)基本字符集的“符”是相同的。

執(zhí)行環(huán)境中必須提供的字符還有alert,backspace,carriage return,new line以及一個(gè)各位都為0的字符(null character)。

執(zhí)行環(huán)境中程序可以處理的其他字符也被叫做擴(kuò)展字符(extended characters),這些擴(kuò)展字符與基本字符集以及alert,backspace,carriage return,new line和null character共同構(gòu)成了執(zhí)行環(huán)境中的擴(kuò)展字符集(extended character set),或稱之為執(zhí)行字符集(the execution character set)。

對(duì)于執(zhí)行環(huán)境來(lái)說(shuō),擴(kuò)展字符(extended characters)同樣是由編譯器自行定義的。

•C語(yǔ)言中的Byte
C語(yǔ)言中的Byte,如同int等類型類似,同樣不是一個(gè)確定長(zhǎng)度的位組。C語(yǔ)言只是要求Byte能放得下執(zhí)行環(huán)境中和編輯/編譯環(huán)境中基本字符集的編碼。這樣在某些編譯器中C語(yǔ)言中的Byte是9位就不難理解了,這并不違背C語(yǔ)言的基本定義。

同樣的道理,如果在編輯/編譯環(huán)境中,基本字符集的編碼是8位,而在運(yùn)行環(huán)境中基本字符集的編碼是16位的話,那么Byte的大小顯然就必須至少為16位。

由此可見,在C語(yǔ)境中的Byte并非是平時(shí)普遍認(rèn)為的octet(8位組)。

•C語(yǔ)言中的char數(shù)據(jù)類型
C語(yǔ)言中的char數(shù)據(jù)類型是一種整數(shù)類型(integer type),它的大小被定義為1個(gè)Byte。亦即

sizeof (char)  ≡ 1

若需要知道某個(gè)具體編譯器的Byte究竟是多少位,可以查看編譯器提供的limits.h。其中定義的符號(hào)常量CHAR_BIT就是char類型的位數(shù),也就是Byte的位數(shù)。

補(bǔ)充:

C標(biāo)準(zhǔn)的矛盾?

"addressable unit of data large enough to hold any member of the basic character set of the execution environment" (clause 3.6 of the C standard)

可是在5.2.1-3中

The representation of each member of the source and execution basic character sets shall fit in a byte.

相關(guān)文章

  • VC6.0打開文件以及向工程中添加文件時(shí)程序崩潰自動(dòng)退出解決方法

    VC6.0打開文件以及向工程中添加文件時(shí)程序崩潰自動(dòng)退出解決方法

    vc6.0程序中,點(diǎn)擊打開文件以及向工程中添加文件時(shí),程序竟然崩潰自動(dòng)退出了,不知什么原因,安裝相同的vc程序,本本竟然出現(xiàn)此緣故
    2013-01-01
  • C++線程安全的單例模式講解

    C++線程安全的單例模式講解

    今天小編就為大家分享一篇關(guān)于C++線程安全的單例模式講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • QT使用共享內(nèi)存實(shí)現(xiàn)進(jìn)程間通訊

    QT使用共享內(nèi)存實(shí)現(xiàn)進(jìn)程間通訊

    這篇文章主要為大家詳細(xì)介紹了QT如何使用共享內(nèi)存實(shí)現(xiàn)進(jìn)程間通訊,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • c++中new一個(gè)結(jié)構(gòu)體初始化過(guò)程

    c++中new一個(gè)結(jié)構(gòu)體初始化過(guò)程

    這篇文章主要介紹了c++中new一個(gè)結(jié)構(gòu)體初始化過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 深度理解c++中的this指針

    深度理解c++中的this指針

    這篇文章主要介紹了C++編程指向成員的指針以及this指針的基本使用指南,與C語(yǔ)言一樣,存儲(chǔ)的數(shù)值被解釋成為內(nèi)存里的一個(gè)地址,需要的朋友可以參考下。
    2016-07-07
  • C++?DLL注入工具(完整源碼)

    C++?DLL注入工具(完整源碼)

    這篇文章主要介紹了C++?DLL注入工具的相關(guān)資料,并向大家分享了完整的源碼,具有一定的參考價(jià)值,希望對(duì)正在工作或?qū)W習(xí)的你有所幫助
    2022-02-02
  • C語(yǔ)言 function recursion函數(shù)遞歸詳解

    C語(yǔ)言 function recursion函數(shù)遞歸詳解

    遞歸指的是在函數(shù)的定義中使用函數(shù)自身的方法,舉個(gè)例子: 從前有座山,山里有座廟,廟里有個(gè)老和尚,正在給小和尚講故事呢!故事是什么呢?"從前有座山,山里有座廟,廟里有個(gè)老和尚,正在給小和尚講故事呢!故事是什么呢?"從前有座山,山里有座廟,循環(huán)下去
    2021-10-10
  • C++實(shí)現(xiàn)的泛型List類分享

    C++實(shí)現(xiàn)的泛型List類分享

    這篇文章主要介紹了C++實(shí)現(xiàn)的泛型List類分享,參考C#的List功能實(shí)現(xiàn),需要的朋友可以參考下
    2014-07-07
  • C語(yǔ)言開發(fā)實(shí)現(xiàn)井字棋及電腦落子優(yōu)化示例詳解

    C語(yǔ)言開發(fā)實(shí)現(xiàn)井字棋及電腦落子優(yōu)化示例詳解

    以前上課經(jīng)常和同桌玩起井字棋,那么我們就當(dāng)我們回憶童年,現(xiàn)在也用C語(yǔ)言來(lái)實(shí)現(xiàn)井字棋,本次代碼相對(duì)于初階的井字棋,在電腦下棋代碼部分做了優(yōu)化,使得電腦更加具有威脅
    2021-11-11
  • 枚舉類型的定義和應(yīng)用總結(jié)

    枚舉類型的定義和應(yīng)用總結(jié)

    如果一種變量只有幾種可能的值,可以定義為枚舉類型。所謂“枚舉類型”是將變量的值一一列舉出來(lái),變量的值只能在列舉出來(lái)的值的范圍內(nèi)
    2013-10-10

最新評(píng)論

湖北省| 根河市| 恩施市| 桐城市| 绵阳市| 河西区| 南通市| 武宣县| 苏尼特左旗| 宣威市| 祥云县| 西吉县| 沙河市| 通河县| 兴化市| 海门市| 镇原县| 林芝县| 邵阳县| 老河口市| 铜陵市| 库伦旗| 泾阳县| 筠连县| 沐川县| 仙居县| 贞丰县| 嘉祥县| 同仁县| 南澳县| 浑源县| 海丰县| 台北县| 灯塔市| 县级市| 建阳市| 哈巴河县| 双江| 梅州市| 昭觉县| 临高县|