字符类型int

Gio*_*nJh 5 c character-encoding

字符常量int在C中有类型.

现在假设我的机器的本地字符集是Windows Latin-1(http://www.ascii-code.com/),这是一个256字符集,所以每个char单引号之间,如'x',映射到int0到255之间的值右?

假设平原charsigned我的机器上,并考虑下面的代码:

char ch = 'â'

if(ch == 'â')  
{
    printf("ok");
}
Run Code Online (Sandbox Code Playgroud)

由于整数提升ch将被提升为负数量类型int(因为它具有前导零)并且被â映射到正数量ok将不会被打印.

但我确定我错过了什么,你能帮忙吗?

Ern*_*ill 1

实际上,最初的分配不会按预期进行:

\n\n
char ch = '\xc3\xa2';\n
Run Code Online (Sandbox Code Playgroud)\n\n

这里有一个溢出,gcc 会对此发出警告。从技术上讲,这是未定义的行为,尽管对于非常常见的单字节char类型,该行为是足够可预测的——这是一个简单的整数溢出。根据您的默认字符集,这是一个多字节字符;如果我在我的机器上将其打印为整数,我会得到十进制 50082。

\n\n

此外,比较是无效的,同样是因为char太小而无法容纳正在比较的值,并且再次,好的编译器会对此发出警告。

\n\n

ISO C 定义了wchar_t,一种足够宽的类型,可以容纳扩展(即非 ASCII)字符,以及许多库函数的宽字符版本。必须处理非 ASCII 文本的代码当然应该使用这种宽字符类型。

\n