将带有锐音符的字符分配给 C int 变量
Assigning a character with an acute into a C int variable
鉴于此 C
指令:
int c = 'é';
在运行时,执行此指令后,如果我查看 c
的值,十六进制值为 0xffffffe9
而我期望的是 0x000000e9
。 ..
你能解释一下为什么会这样吗?我应该怎么做才能得到预期的结果?
请注意,如果我改为使用此指令:
int c = 0xE9;
我得到 0x000000e9
作为 c 的值。
谢谢你帮助我。
char
已在您的平台上签名。大于 127 的非 ASCII 字符常量实际上是负 int
值。尝试将非 ASCII 字符常量转换为 (unsigned char)
,或者如果您使用 gcc
或 clang
,请添加 -funsigned-char
作为命令行选项。
在源文件中使用非 ASCII 字符会引发问题。根据您的文本编辑器使用的编码和编译器的预期,您最终可能会遇到比您在此处遇到的更令人惊讶的行为。
最好完全避免它们... Tant pis。
鉴于此 C
指令:
int c = 'é';
在运行时,执行此指令后,如果我查看 c
的值,十六进制值为 0xffffffe9
而我期望的是 0x000000e9
。 ..
你能解释一下为什么会这样吗?我应该怎么做才能得到预期的结果?
请注意,如果我改为使用此指令:
int c = 0xE9;
我得到 0x000000e9
作为 c 的值。
谢谢你帮助我。
char
已在您的平台上签名。大于 127 的非 ASCII 字符常量实际上是负 int
值。尝试将非 ASCII 字符常量转换为 (unsigned char)
,或者如果您使用 gcc
或 clang
,请添加 -funsigned-char
作为命令行选项。
在源文件中使用非 ASCII 字符会引发问题。根据您的文本编辑器使用的编码和编译器的预期,您最终可能会遇到比您在此处遇到的更令人惊讶的行为。
最好完全避免它们... Tant pis。