簡體   English   中英

3.9.1基本類型

[英]3.9.1 Fundamental types

C ++標准§3.9.1基本類型

聲明為字符(char)的對象應足夠大以存儲實現的基本字符集的任何成員。 如果來自此集合的字符存儲在字符對象中,則該字符對象的整數值等於該字符的單字符文字形式的值。 由char對象是否可以包含負值由實現定義。 字符可以顯式聲明為未簽名或已簽名。 普通字符,有符號字符和無符號字符是三種不同的類型。<...>

我無法理解未簽名的字符。

數字可以是+1或-1。

我不能以類似的方式認為-A和+ A。

引入無符號字符的歷史原因是什么?

char實際上是整數類型。 只是類型也用於表示字符。 由於它是整數類型,因此談論簽名是有效的。

(我不完全了解歷史原因。可能通過將其與char混合來保存byte關鍵字。)

在C(以及C ++)中, char並不表示character 這意味着一個字節( int_least8_t )。 這是Unicode之前的時代的歷史遺產,當時字符實際上可以容納在char ,但現在是該語言的缺陷。

由於char確實是一個小整數,所以有signed charunsigned char是有意義的。 實際上有三種不同的char類型: charsigned charunsigned char 通用約定是, unsigned char表示字節,而普通char表示字符 UTF-8代碼單元。

計算機不能“理解”字母或字符的概念; 他們只處理數字。 因此,一群人聚在一起,商定什么數字對應什么字母。 使用中最常見的一種是ASCII(盡管該語言不能保證)。

在ASCII中,字母A具有代碼65 在使用ASCII的環境中,字母A將由數字65表示。

char數據類型還用作整數類型-意味着它只能容納數字,因此允許unsigned和有signed 在我看到的大多數平台上, char是一個8位字節。

您正在閱讀太多。 字符是可以容納字符的小型整數類型。 故事結局。 未簽名的char從未被引入或未打算使用,只是它的樣子,因為char是與int或long或short相同的整數類型,只是大小有所不同。 事實是,沒有理由使用無符號字符,但是如果人們想要一個字節的無符號整數存儲,人們就會這樣做。

如果您要占用較小的內存並且要存儲一個數字,則帶符號和無符號char很有用。

如果要使用128-255之間的值,則需要unsigned char

unsigned char score = 232;

如果要存儲兩個字符之間的差異,則帶符號的char表示usfull。

signed char diff = 'D' - 'A';

char與其他兩個字符不同,因為您不能假定兩者都是。

您可以使用從255到0的溢出嗎? (我不知道。只是一個猜測)

也許不僅與字符有關,而且與-128至127之間以及0至255之間的數字有關。

考慮一下ASCII字符集。

歷史上,用於計算文本的所有字符都是由ASCII字符集定義的。 每個字符都由一個8位字節表示,該字節是無符號的,因此每個字符的值都在0-255之間。

單詞字符被簡化為char進行編碼。

8位字符使用與8位字節相同的內存,因此就編譯器而言,它們是可互換的。

當將編譯器指令應用於字節或char強制將其值設置為0-255時,它們將為unsigned(默認情況下,所有數字均已簽名,因為二進制補碼用於表示二進制的負數)。

如果未簽名,則其值為-128-+127。

如今,隨着UNICODE和多字節字符集的出現,字節和char之間的這種關系不再存在。

我不確定,但是我猜想帶符號的字符對於區分“常規” ASCII碼(僅占用7位)和“其他”字符很有用。 如果(ch > 0)為真,則表明您正在處理一個熟悉的字符,並在所有終端上以相同的方式打印。 (ch < 0) ,它是“ OEM代碼頁”或諸如此類,這意味着打印的實際字符取決於特定終端的編碼。 它可以產生繪圖線,西里爾字母或斯堪的納維亞口音。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM