/*intconv.c -- 一些不匹配的整数转换*/
#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);
return 0;
//手打虽然辛苦。。当键盘熟悉。。
}
输出
num as short and unsigned short :336 336
-num as short and unsigned short :-336 65200
num as int and char:336 P
WORDS as int short,and char:65618 82 R
为什么 65200呢?
我也想不明白,后来看书.恍然大悟.
书曰:这是因为有符号 short int 值 在参考系统同的表示方式造成的。
首先,他的大小为2个字节.,其次,该系统试用一种被称为2的补码的方法来表示有符号的整数。
在这种方法中,数字0~32767代表他们本身,而数字32768到65535则代表负数,65535代表-1、65534代表-2、依此类推。-336 由于 65536-336 = 65200.
第三行.为什么显示为.P.?
因为。short int 占 2个字节.一个char占一个字节.当 printf()使用%c打印336时.它只查看用于存放336的两个字节中的一个字节。这种阶段,相当于用256除以一个整数,并取其余数。
在这种情况下,余数是80,也就是 字符P的 阿斯特码.
更技术些,该数字被解释成“以256为模”意思即 用数字 256 除的余数.
-------------------------------over.就到这里了.