输出
//测试%d与%hhd的区别
#include<stdio.h>
int main()
{
int num_1 = 127;
int num_2 = 128;
int num_3 = 2147483648;
printf("%d,%d,%d\n", num_1, num_2, num_3);
printf("%hhd,%hhd,%hhd", num_1, num_2, num_3);
return 0;
}
结果如下:
为什么num_2和num_3的%d和%hhd打印结果会不同呢?
事实上,是因为%hhd表示以signed char 或者 unsigned char类型打印
%d表示以signed int 或者unsigned int类型打印
我这里的编译器以%hhd格式输出时用signed char打印,而signed char类型的值范围在-128~127
超过了就会溢出,所以num_2以%hhd格式化输出时,就变成了“127+1=-128”(从头开始)
同样,在处理num_3时,因为我的编译器以%d格式输出时用signed int,而signed int类型的值范围在-2147483648~2147483647,num_3超过了范围,就变成了“2147483647+1=-2147483648”