c - 为什么在这种情况下 char 的输出不同?

标签 c arrays hex printf

请帮助我理解程序的输出:

int main()
{
    char a = 0x99;
    printf("%02x\n", a);
    return 0;
}

输出:

ffffff99

为什么输出是这样的?

最佳答案

有几个因素在起作用。一方面,在您的计算机上,普通 char是有符号类型,而不是无符号类型。另一方面,可变参数函数的参数,如 printf()接受整数提升规则,所以你的 char转换为 int ,并且因为它已签名,所以 0x99作为char是一个负数,所以它被符号扩展为 0xFFFFFF99 , 因此被打印成那样。

要获得您期望的结果,请使用以下方法之一:

printf("%02x", (unsigned char)a);
printf("%02x", a & 0xFF);

关于c - 为什么在这种情况下 char 的输出不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43603396/

相关文章:

c++ - 成员初始化列表?合成方法?结构体/数组编译问题

c - 将字节数组打印为格式化文本会给出不同的输出 - C

c++ - 如何将 int 转换为 ASCII char C++

c - 如何在整个项目(由其他人创建)中添加标志(例如-g)?

c - Linux 中的 signal 和 rt_signal 系统调用有什么区别?

Javascript - 循环对象数组,仅显示最后一个对象

php - PHP数组输出仅显示一个元素

java - 在 Clojure 中将十六进制摘要转换为长整数

c# - 如何通过属性编码为 ANSI 字符串?

c - 读取 C 中的字符串长度 - 无法使用 <string.h>