该段C语言代码中的数据类型有什么区别?

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main(void)

{
short MaxShortint = 32767;
short MinShortint = -32768;

unsigned short MaxUnsShortint = 65535;
unsigned short MinUnsShortint = 0;

printf("MaxShortint = %hd\n",MaxShortint);
printf("MaxShortint + 1 = %hd\n\n",MaxShortint + 1);

printf("MinShortint = %hd\n",MinShortint);
printf("MinShortint - 1 = %hd\n\n",MinShortint - 1);

printf("MaxUnsShortint = %hu\n",MaxUnsShortint);
printf("MaxUnsShortint + 1 = %hu\n\n",MaxUnsShortint + 1);

printf("MinUnsShortint = %hu\n",MinUnsShortint);
printf("MinUnsShort - 1 = %hu\n",MinUnsShortint - 1);
system("pause");
return 0;
}

在上面中第一个printf函数中数据类型中%后h已经代表了短整形数据,为什么还要加d才可以正常显示,而在printf("MaxUnsShortint = %hu\n",MaxUnsShortint);这个中,%hu 里的h是短整型数据,u是符号修饰符表示非负整数,又为什么不需要d就可以正常显示

int printf(const char *format,[argument]);

 

    format
    参数输出的格式,定义格式为:%[flags][width][.perc][F|N|h|l]type

 

规定数据输出方式,具体如下:

1.type含义如下:

d 有符号10进制整数

i 有符号10进制整数

o 无符号8进制整数

u 无符号10进制整数

x 无符号的16进制数字,并以小写abcdef表示

X 无符号的16进制数字,并以大写ABCDEF表示

f 浮点数

E/e 用科学表示格式的浮点数

g 使用%f和%e表示中的总的位数表示最短的来表示浮点数 G 同g格式,但表示为指数

c 单个字符

s 字符串

S wchar_t字符(宽字符)类型字符串

% 显示百分号本身

p 显示一个指针,near指针表示为:XXXX

far指针表示为:XXXX:YYYY

n 相连参量应是一个指针,其中存放已写字符的个数

2.flags规定输出格式,取值和含义如下:

无 右对齐,左边填充0和空格

- 左对齐,右边填充空格

+ 在数字前增加符号 + 或 -

0 将输出的前面补上0,直到占满指定列宽为止(不可以搭配使用-)

空格 输出值为正时冠以空格,为负时冠以负号

# 当type=c,s,d,i,u时没有影响

type=o,x,X时,分别在数值前增加'0',"0x","0X"

type=e,E,f时,总是使用小数点

type=g,G时,除了数值为0外总是显示小数点

3.width用于控制显示数值的宽度,取值和含义如下

n(n=1,2,3...) 宽度至少为n位,不够以空格填充

0n(n=1,2,3...) 宽度至少为n位,不够左边以0填充

* 格式列表中,下一个参数还是width

4.prec用于控制小数点后面的位数,取值和含义如下:

无 按缺省精度显示

0 当type=d,i,o,u,x时,没有影响

type=e,E,f时,不显示小数点

n(n=1,2,3...) 当type=e,E,f时表示的最大小数位数

type=其他,表示显示的最大宽度

.* 格式列表中,下一个参数还是width

5.F|N|h|l表示指针是否是远指针或整数是否是长整数

F远指针

n 近指针

h 短整数或单精度浮点数

l 长整数或双精度浮点数

 

 

以上内容参考:http://baike.baidu.com/view/410546.htm

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

________________________________________________________________

重点看第二行,[h]表示h是可选的,但是type是必须的。所以只写h是不对的,因为没有type。而u是type一种,所以可以。

只是C语言的规定而已,没有为什么 哈哈。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-12
编译器的问题吧!
相似回答