将字符转换为无符号int-C
我不明白这条小干线的输出:将字符转换为无符号int-C,c,ascii,C,Ascii,我不明白这条小干线的输出: int main(int argc, char **argv) { char c = '\336'; unsigned int u = (unsigned int) c; printf("%d\n",u); /* I'm waiting for 222 but no ...*/ exit(EXIT_SUCCESS); } 为什么这个打印像我的变量是有符号的int?我怎样才能得到我想要的值 多谢各位 标准没有指定默认情况下字
int main(int argc, char **argv) {
char c = '\336';
unsigned int u = (unsigned int) c;
printf("%d\n",u); /* I'm waiting for 222 but no ...*/
exit(EXIT_SUCCESS);
}
为什么这个打印像我的变量是有符号的int?我怎样才能得到我想要的值
多谢各位 标准没有指定默认情况下字符是有符号的还是无符号的。因此,这是一个依赖于实现的,在您的机器上,它看起来是有签名的,“\336”在本例中是值-34 为了实现您的期望,您必须:
有关进一步的解释,您可以在此处查看:首先,您应该说明实际输出是什么。其次,
char
可以是无符号的,如果它有8位(通常是8位),那么222就不适合它了。那么我该怎么做才能得到值222呢?我尝试了一些东西,但没有working@Shahbaz:222适合于无符号8位字符
,但不适合于有符号8位字符
。此外,如果您提供的是无符号int
@dreamlax,打字错误!:),则应使用%u
而不是%d
)