#include <stdio.h>
int main (int argc, char *argv[])
{
printf ("%hhd\n", 0x100);
printf ("%hhu\n", 0x100);
return 0;
}
[mathieu@localhost mathieu]$ ./a.out
0
0
以下结果一样
printf ("%hhd\n", 256);
printf ("%hhu\n", 256);
%hhu 是指定后面的参数为unsigned char(不含负数, h--half)类型然后打印出。
这个例子中256转成char(8bit)后的值为0, 也就是取0x100的后两位。
(Without a type modifier, the corresponding argument is treated as an int
(for the signed conversions `%i' and `%d') or unsigned int
(for the unsigned conversions `%o', `%u', `%x', and `%X'). Recall that since printf
and friends are variadic, any char
and short
arguments are automatically converted to int
by the default argument promotions.
`hh' Specifies that the argument is a
signed char
or unsigned char
, as appropriate. A char
argument is converted to an int
or unsigned int
by the default argument promotions anyway, but the `h' modifier says to convert it back to a char
again.
)