负ASCII值

负ASCII值有什么意义?

int a = '«'; //a = -85 but as in ASCII table '<<' should be 174 

这是编译器的char类型为有符号整数类型的假象, int是更宽的有符号整数类型,因此字符常量被视为负数,并且符号扩展为更宽的整数类型。

它没有多大意义,只是发生了。 C标准允许编译器实现选择是否将char视为有符号或无符号。 有些编译器甚至有编译时间开关来改变默认值。 如果要确保char类型的unsigned char ,请分别显式写入signed charunsigned char

使用unsigned char扩展为int以避免负的int值,或者打开一个全新的Pandora的盒子并享受wchar

没有负的ASCII值。 ASCII包括128个字符的定义。 他们的指数都是正数(或零!)。

您看到此负值,因为该字符来自扩展的ASCII集,并且太大而无法容纳char字面值。 因此,该值溢出到您的char (在您的系统上签名,显然)定义为负面。

解决方法是直接写入值:

 unsigned char a = 0xAE; // « 

我用惯用的hex表示法编写它,因为我认为它看起来比174更漂亮。 🙂

哪有这回事。 ASCII是一个字符表,每个字符在表中都有一个索引或一个位置。 没有“负面”指数。

但是,有些编译器认为char是一个带符号的整数数据类型,这可能是造成混淆的原因。

如果将其打印为unsigned int ,则会将相同的位解释为无符号(正)值。

ASCII范围0..127,ANSI(也称为“扩展ASCII”)范围为0..255。

ANSI范围不适合签名字符(大多数编译器中字符的默认类型)。

大多数编译器都有像’char’类型是无符号(GCC)的选项。

我有这个神器。 当您使用char作为符号时,您没有问题。 但是当你将它用作整数(使用isalpha()等)并且ASCII代码大于127时,则’char’解释为’signed char’并且isalpha()返回exception。 当我需要使用’char’作为整数时,我将’char’转换为unsigned:

  • isalpha((unsigned char)my_char);

@ n0rd:koi8代码页使用128到255的ascii和其他国家代码页: http : //www.asciitable.com/

在字符表示中,您分配了8位(1个字节)。 除此之外,第一位用于表示符号。 在无符号字符的情况下,它使用全8位来表示允许0到255的数字,其中128-255被称为扩展ASCII。 由于我所描述的内存中的表示,我们有-1具有与255相同的值, char(-2)==char(254)