| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 622 人关注过本帖
标题:又一问题.类型转换问题:PPPPPP
只看楼主 加入收藏
genius023
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2007-7-7
收藏
 问题点数:0 回复次数:7 
又一问题.类型转换问题:PPPPPP

main(){
int a,b=322;
float x,y=8.88;
char c1='k',c2;
a=y;
x=b;
a=c1;
c2=b;
printf("%d,%f,%d,%c",a,x,a,c2);

结果是107,322.000000,107,B
为什么是107呢???第一个不是应该等于8吗?
是不是k是107啊??

搜索更多相关主题的帖子: PPPPPP 类型 
2007-08-04 09:27
medicihophy
Rank: 1
等 级:新手上路
威 望:1
帖 子:102
专家分:0
注 册:2007-7-28
收藏
得分:0 
you are right!
k的ASII码就是107,而且你那里的c2输出最搞笑,将322这个大于255整型数赋值给一个字符,结果就变成了322-256=66=(int)B

[此贴子已经被作者于2007-8-4 9:55:15编辑过]


2007-08-04 09:43
genius023
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2007-7-7
收藏
得分:0 
恩,255是什么东西???高八位吗??
书上说,b的低八位为01000010,即十进制66,按ASCII码对应于字符B, 那是不是应该是322-256啊?哈哈
2007-08-04 09:50
medicihophy
Rank: 1
等 级:新手上路
威 望:1
帖 子:102
专家分:0
注 册:2007-7-28
收藏
得分:0 
嗯,写错了

2007-08-04 09:54
young
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:223
专家分:160
注 册:2004-9-5
收藏
得分:0 

b 等于 322,换算成16进制是0x00000142(假设int型是32位)
c2=b;由于c2为char型,一般char都是8位,这样一个32位的数据要赋值给一个8的数据,要进行强制数据类型转换,显然只能把其中的8位赋给它,那么到底把那哪8位赋给它呢?这个就涉及到 一个 所谓 CPU是“大端模式”还是“小端模式”
在“大端模式”下,从最高位开始赋值,也就是说把高8位赋给c2,这样c2的值就是0x00。
在“小端模式”下,从最低位开始赋值,也就是说把低8位赋给c2,这样c2的值就是0x42。
楼主的CPU显然是“小端模式”,所以得到c2的值为0x42,(intel,arm 处理器都是小端模式)


如果你爱C语言,请你爱指针; 如果你爱指针,请你爱指针的指针;
2007-08-04 10:46
我是菜鸟哦
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:921
专家分:209
注 册:2007-5-4
收藏
得分:0 
楼上见解颇深,受益匪浅啊
电脑内部的转换是靠2进制来实现的
差点被上上楼的ASCII码"循环"蒙了,不过说起来还真巧合啊

偶是菜鸟鸟偶惧WHO?!!!!
2007-08-04 19:27
crazyboy216
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2007-6-28
收藏
得分:0 
ASCII码"循环"是有这么回事,没蒙你,书上有的,你去看看
2007-08-04 20:46
水漪儿
Rank: 2
来 自:shangshida
等 级:论坛游民
帖 子:147
专家分:10
注 册:2007-7-19
收藏
得分:0 

呵呵,也可以说是循环,如果要书面语,就是所谓的溢出了.

2007-08-04 20:58
快速回复:又一问题.类型转换问题:PPPPPP
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027028 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved