c - 有符号字符的无符号字符输出

标签 c types

我有以下代码:

char x = -1;
int y = x;

printf("%u\n", x);
printf("%u\n", y);

输出为:

4294967295
4294967295

我不明白为什么x可以得到这样的值。我知道无符号字符的最大值是255,有符号字符的最大值是127。它怎么可能是4294967295?

最佳答案

对于像 printf 这样使用可变参数的函数,任何小于 int 的整数类型(charshort >) 隐式提升为 int。 float 也是如此,float 提升为 double

因此,您的 char 被符号扩展为值为 -1int,并且由于您将其打印为无符号,用 2 的补码得到 UINT_MAX

编辑:正如下面 chux 所指出的,如果您的 char 默认为无符号(这取决于您的编译器/平台),则答案将是 255 。当提升发生时,该值将被零扩展而不是符号扩展。

关于c - 有符号字符的无符号字符输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47599120/

相关文章:

opengl - 为什么 OpenGL 使用 float 来定义各向异性过滤的级别?

c - 整体文字识别算法详解

haskell - 表达无限种

javascript - Typescript:此条件将始终返回 'false',因为类型 'Type' 和 'number' 没有重叠

android - ResourceType (Skipping entry in package table) 问题

python - 函数可以是 Python 数据类成员吗?

c - if () 语句的不同参数

c++ - 用于矩阵堆栈的 openGL

c - 如何在 C 中读取 ELF header ?

c - 使用 CUBLAS/CUSPARSE 操作将统一数组的元素设置为 0 是否安全?