读取已签名的字符为未签名 - 类型促销

时间:2011-10-12 16:45:41

标签: c char int type-conversion integer-promotion

考虑这个小程序:

#include <stdio.h>
int main()
{
    char c = 0xFF;
    printf("%d\n", c);

    return 0;
}

其输出为-1,正如预期的那样(考虑char已在我的身上签名 系统)。我要做的是让它打印255。这是 当然是对实际情况的简化,我无法定义 c为无符号。

第一个可能的更改是使用%u作为格式化程序,但是 通常的类型促销规则适用于此处,数字打印为 2 32 - 1。

所以有没有办法在获取之前将签名的char读作unsigned 提升为int?我可以创建一个指向unsigned char设置的指针 c的地址,稍后取消引用,但不确定这是否是最好的 方法

1 个答案:

答案 0 :(得分:4)

正在使用已签名的促销规则宣传

c。将c投射到unsigned以使用未签名的促销。

printf("%u\n", (unsigned char)c);

Unsigned char将被提升为unsigned int。