代码之家  ›  专栏  ›  技术社区  ›  DevSolar

printf()、无符号字符和%hhd

  •  0
  • DevSolar  · 技术社区  · 6 年前

    程序:

    #include <stdio.h>
    #include <limits.h>
    
    int main( void )
    {
    #ifdef __CHAR_UNSIGNED__
        printf( "%d\n", __CHAR_UNSIGNED__ );
    #endif
        printf( "%d\n", CHAR_MAX );
        printf( "%d\n", CHAR_MIN );
        printf( "%hhd\n", CHAR_MAX );
    }
    

    输出(在我的x86_64桌面上):

    127
    -128
    127
    

    这是意料之中的。现在,我在覆盆子圆周率(手臂)上也做了同样的测试:

    1
    255
    0
    -1
    

    所以… 显然我误解了 一些步骤 CHAR_MAX 正在以其方式输出,如 我期望的输出 在最后一行--传球 字符最大值 %hhd 在机器上 char 未签名-- 本来应该是 255 .

    (如果你问的话,结果是一样的 (char)CHAR_MAX ,和 (unsigned char)CHAR_MAX )

    我错过了什么?

    在回归测试中,我也遇到过这种情况。 printf() 对覆盆子PI的实现——顺便说一下, 打印 255个 .所以…只有一个实现是正确的,我有一种下沉的感觉,它不是我的…

    1 回复  |  直到 6 年前
        1
  •  5
  •   Some programmer dude    6 年前

    格式 "%hhd" 字节。如果你通过 从技术上来说 .打印 需要使用的字节 "%hhu"

    two's complement 整数起作用,而那个 0xff -1