![](/img/trans.png)
[英]Printing quotation mark not in whole std::string in C++ gives negative ASCII value?
[英]Negative ASCII value
負ASCII值有什么意義?
int a = '«'; //a = -85 but as in ASCII table '<<' should be 174
沒有負的ASCII值。 ASCII包括128個字符的定義。 他們的指數都是正數(或零!)。
您看到此負值,因為該字符來自擴展的ASCII集,並且太大而無法放入char字面值。 因此,該值溢出到您的char
(在您的系統上簽名,顯然)定義為負面。
解決方法是直接寫入值:
unsigned char a = 0xAE; // «
我用常規的十六進制表示法編寫它,因為我認為它看起來比174
更漂亮。 :)
這是編譯器的char
類型是有符號整數類型的假象, int
是更寬的有符號整數類型,因此字符常量被認為是負數,並且符號擴展為更寬的整數類型。
它沒有多大意義,只是發生了。 C標准允許編譯器實現選擇是否將char
視為有符號或無符號。 有些編譯器甚至有編譯時間開關來改變默認值。 如果要確保char
類型的unsigned char
,請分別顯式寫入signed char
或unsigned char
。
使用unsigned char
擴展為int
以避免負的int
值,或者打開一個全新的Pandora的盒子並享受wchar
。
哪有這回事。 ASCII是一個字符表,每個字符在表中都有一個索引或一個位置。 沒有“負面”指數。
但是,有些編譯器認為char
是一個帶符號的整數數據類型,這可能是造成混淆的原因。
如果將其打印為unsigned int
,則會將相同的位解釋為無符號(正)值。
ASCII范圍0..127,ANSI(也稱為“擴展ASCII”)范圍為0..255。
ANSI范圍不適合簽名字符(大多數編譯器中字符的默認類型)。
大多數編譯器都有像'char'類型是無符號(GCC)的選項。
我有這個神器。 當您使用char作為符號時,您沒有問題。 但是當你將它用作整數(使用isalpha()等)並且ASCII代碼大於127時,則'char'解釋為'signed char'並且isalpha()返回異常。 當我需要使用'char'作為整數時,我將'char'轉換為unsigned:
@ n0rd:koi8代碼頁使用128到255的ascii和其他國家代碼頁: http : //www.asciitable.com/
在字符表示中,您分配了8位(1個字節)。 除此之外,第一位用於表示符號。 在無符號字符的情況下,它使用全8位來表示允許0到255的數字,其中128-255被稱為擴展ASCII。 由於我所描述的內存中的表示,我們有-1具有與255相同的值, char(-2)==char(254)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.