点滴收获

/*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.就到这里了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值