一个很小的程序,对程序输出结果有点不太理解.求高手指教
#include<stdio.h>
#define PAGES 336
#define WORDS 65618
int main(void)
{
short num=PAGES;
short mnum=-PAGES;
printf("num as short and unsigned short:%hd %hu\n",num,num);
printf("-num as short and unsigned short:%hd %hu\n",mnum,mnum);
printf("num as int and char:%d %c\n",num,num);
printf("WORDS as int,short,and char:%d %hd %c\n",
WORDS,WORDS,WORDS);
前面的三个输出语句结果我都知道是什么原因,最后一个输出结果为82 1 R
这是为什么?是怎么得到的?WORDS的长度为65618,计算机的最大无符号整形长度为65535,最大有符号长度为32767,那么这个82是怎么计算出来的?还有后面的1 R,这是<<C primer plus>>上的例子,但是讲的不够透彻.谢谢各位了!
/* printf("size of int:%d\n",sizeof(int)); 测试结果=2 */
printf("size of short int:%d\n",sizeof(short int));测试结果=2 */
getch();
return 0;
}
问题点数:0、回复次数:1Top
1 楼zhangsongqi_0504(奥法)回复于 2006-01-02 16:31:54 得分 0
哎呀,终于知道是怎么回事了!以下是我的调试结果,并根据调试结果得出的原因.请各位指正.
最后一个输出为82 1 R ,原因是%d是输出有符号的整形,范围(-32768到32767);%hd是输出无符号的整形,范围是(0到32767)可以用32768代替WORDS的65618 做一个测试,因为32768已经超过-32768到32767的最大值,所以再从最小值循环,即为输出-32768.又因为32768已经超过0到32767的最大值,所以也要从头再开始循环,即为输出0.最后一个对应ASCII码.Top




