c程序问题

int I=289;
CHAR C=‘A’;
C=I;
谁可以具体讲讲这个踢的过程!就是在内存的转换过程!
2楼说的对,但还是不太明白!我如果想知道每个数型都占内存多少位应该看什么书呢?网上有吗?谢谢这么详细的回答!
"""""""""""289的16进制表示是:(121)_16,所以第三位的1被砍掉,剩下(21)_16赋值给C,查表(21)_16对应的字符是‘!’""""""""""""""主要是这里不太明白,因为你的那个16进制的表达法,还有过程不怎么明白?答好了加分,我是 想问为什么要用16位的表示?

楼上的错了。
开始还对,定义整型变量I并初始化为289,然后定义字符型变量C,并初始化为字符'A',最后一个错了。ASCII码只有256个,289很明显超出了范围,由于char占一个byte,8bit位,而int一般的机器都是32位,把int型赋给char型,高位(从第9位开始)上的值全被砍掉。289的16进制表示是:(121)_16,所以第三位的1被砍掉,剩下(21)_16赋值给C,查表(21)_16对应的字符是‘!’

汗,还不明白?好,举个简单的例子。你有一个盒子,长8厘米,现在你有一根棍子,长32厘米(宽度跟盒子刚好匹配),现在你想把这根棍子装进这个盒子里面,而且你邮箱保留较细的那一头,你怎么办?只能把从细的这一头开始到8厘米处锯掉。上面的也是一样的道理啊!289是整型,32位, 二进制表示是
0000,0000,0000,0000,0000,0001,0010,0001
现在你要把它放进一个只有8位的“盒子”里面,又必须保留低位,只有把前面的都砍掉,就成了
0010,0001

16进制每4个bit位一组,
0000,0000,0000,0000,0000,0001,0010,0001
用16进制表是不就对应
0 0 0 0 0 1 2 1
把21前面的位数都砍掉,就只剩下(21)_16,就是(00100001)_2,就是一个byte,满足char类型的长度,查ASCII码表,(21)_16(或者(00100001)_2)对应的字符就是'!'

用16进制完全是为了方便,如果你喜欢写那么多0,那我也没意见
~~~~~~~~~
楼主,你可是我见过的最能问的,难怪叫“不懂就问”,精神可嘉,不过我的有求必应更可嘉,多加点分,出手可别太吝啬小气~~~ 呵呵~~~

再不懂,我也没辙了~~~
温馨提示:答案为网友推荐,仅供参考
第1个回答  2006-12-19
首先定义整型变量I,并赋值289
接着定义字符型变量C,并赋值A
最后把I的值赋给C,就是将ASCII码为289的字符赋给C。