程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C說話中的BYTE和char深刻解析

C說話中的BYTE和char深刻解析

編輯:關於C++

C說話中的BYTE和char深刻解析。本站提示廣大學習愛好者:(C說話中的BYTE和char深刻解析)文章只能為提供參考,不一定能成為您想要的結果。以下是C說話中的BYTE和char深刻解析正文


例如,鄙人面的源法式中“""”以內的“你”、“好”、“,”、“C”、“!”、“\n”就屬於法式要處置的字符。

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

該源法式中的其他字符則屬於書寫源法式的字符,這個中也能夠包括並沒有顯著顯示出來的字符,例如空格字符(space character)、程度制表符(horizontal tab)、垂直制表符(vertical tab)和換頁符(form feed)。

從某種意義下去說,編纂/編譯器是一種接收字符輸出,輸入可履行文件的軟件,由它發生可履行文件經由加載成為內存中的法式,這個法式平日也弗成防止地要處置字符。

編纂/編譯器與它臨盆出的運用法式其實不必定運轉在統一個情況中,這就意味著二者能夠要各自處置分歧的字符聚集。

編纂/編譯器所要處置的字符就是書寫C說話源法式所用的字符,這類字符的聚集叫源字符集(sourcecharacter set)。而運用法式要處置的字符所組成的聚集叫履行字符集(execution character set)。

關於多半C說話進修者來講,因為編纂/編譯情況與運用法式運轉情況是重合的,能夠認識不到源字符集與履行字符集之間的差別。

•源字符集(source character set)
源字符集中的字符就是編寫C說話源法式的字符,也就是C說話請求編纂/編譯器所運轉的情況所供給的字符。這套字符由這幾部門構成:根本字符集(basic character set)、表現換行的字符(new-line character)和擴大字符(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個。這就是C說話對編纂/編譯器運轉情況的最根本的請求,弦外之音就是只需編纂/編譯器所運轉情況供給這95個字符便可以編寫C說話法式了。現實上C說話源法式也“重要”地由這95個字符構成。

另外,C說話還請求在編纂/編譯器運轉的情況中,0~9這十個字符的編號(編碼)必需是持續的。

遺憾的是,有些情況沒法全體供給這95個字符。例如,聽說有些國度的鍵盤上壓根就沒有“[”這個鍵。

因為存在這類情形,所以C說話也允許用所謂的三字符序列(trigraph)來表現那些情況不供給的字符。好比用“??<”表現“{”,用“??>”表現“}”。上面的代碼雖然看起來有些奇異,但是仍然是正當的C法式。

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

編譯器也能夠對根本字符集自行停止擴大,這就是所謂的擴大字符(extended characters)。後面代碼中的“你”、“好”就屬於擴大字符。這些擴大字符只能湧現在標識符、字符常量、字符串字面量、頭名(header name)、正文和某些預處置單詞(preprocessing token that is never converted to a token)中。代碼的其他其他部門湧現擴大字符則是一種不決義行動。

擴大字符的值是由詳細的編譯器界說的。源法式可使用的一切字符的聚集叫做擴大字符集(extended character set)。

•履行字符集
運用法式運轉的情況中的字符集(the execution character set)也是一種擴大字符集(extended character set)。

個中也必需包含後面提到的源字符集中的那95個根本字符集,0~9這十個字符的編碼也必需是持續的。

特殊須要留意的是,C說話並沒有請求履行情況中的根本字符集和編纂/編譯情況中的根本字符集具有雷同的編碼方法,雖然這兩個根本字符集的“符”是雷同的。

履行情況中必需供給的字符還有alert,backspace,carriage return,new line和一個列位都為0的字符(null character)。

履行情況中法式可以處置的其他字符也被叫做擴大字符(extended characters),這些擴大字符與根本字符集和alert,backspace,carriage return,new line和null character配合組成了履行情況中的擴大字符集(extended character set),或稱之為履行字符集(the execution character set)。

關於履行情況來講,擴大字符(extended characters)異樣是由編譯器自行界說的。

•C說話中的Byte
C說話中的Byte,好像int等類型相似,異樣不是一個肯定長度的位組。C說話只是請求Byte能放得下履行情況中和編纂/編譯情況中根本字符集的編碼。如許在某些編譯器中C說話中的Byte是9位就不難懂得了,這其實不違反C說話的根本界說。

異樣的事理,假如在編纂/編譯情況中,根本字符集的編碼是8位,而在運轉情況中根本字符集的編碼是16位的話,那末Byte的年夜小明顯就必需至多為16位。

因而可知,在C語境中的Byte並不是是日常平凡廣泛以為的octet(8位組)。

•C說話中的char數據類型
C說話中的char數據類型是一種整數類型(integer type),它的年夜小被界說為1個Byte。亦即

sizeof (char)  ≡ 1

若須要曉得某個詳細編譯器的Byte畢竟是若干位,可以檢查編譯器供給的limits.h。個中界說的符號常量CHAR_BIT就是char類型的位數,也就是Byte的位數。

彌補:

C尺度的抵觸?

"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.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved