负ASCII值有什么意义?
int a = '«'; //a = -85 but as in ASCII table '<<' should be 174
Run Code Online (Sandbox Code Playgroud)
Lig*_*ica 11
没有负的ASCII值.ASCII包括128个字符的定义.他们的指数都是正数(或零!).
您看到此负值,因为该字符来自扩展的ASCII集,并且太大而无法放入char字面值.因此,该值溢出到您的char(在您的系统上签名,显然)定义为负面的位.
解决方法是直接写入值:
unsigned char a = 0xAE; // «
Run Code Online (Sandbox Code Playgroud)
我用常规的十六进制表示法编写它,因为我认为它看起来比它更漂亮174.:)
ndi*_*dim 10
这是编译器char类型的伪影,它是有符号整数类型,并且int是更宽的有符号整数类型,因此字符常量被视为负数,并且符号扩展为更宽的整数类型.
它没有多大意义,只是发生了.C标准允许编译器实现选择它们是认为char是有符号还是无符号.有些编译器甚至有编译时间开关来改变默认值.如果要确保char类型的签名,请分别显式写入signed char或unsigned char.
使用a unsigned char扩展为a int以避免负值int,或打开一个全新的潘多拉盒子并享受wchar.
哪有这回事。ASCII 是一个字符表,每个字符在表中都有一个索引或一个位置。不存在“负”指数。
然而,一些编译器认为char是有符号整型数据类型,这可能是这里造成混乱的原因。
如果将其打印为unsigned int,您将得到解释为无符号(正)值的相同位。