1

考虑这个小程序:

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

    return 0;
}

正如预期的那样,它的输出是-1(考虑char在我的系统中签名)。我想做的是让它打印255。这当然是对真实情况的简化,我不能只定义 c为无符号。

第一个可能的更改是使用%uas formatter,但这里适用通常的类型提升规则,并且数字打印为 2 32 - 1。

那么有没有办法在将签名的字符提升为int之前将其读取为无符号?我可以创建一个指向设置为地址的无符号字符的指针c,然后再取消引用它,但不确定这是否是最好的方法。

4

1 回答 1

4

c正在使用已签署的促销规则进行促销。强制c转换为未签名以使用未签名促销。

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

Unsigned char 将被提升为 unsigned int。

于 2011-10-12T16:50:15.410 回答