| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 288 人关注过本帖
标题:强制类型转换问题
只看楼主 加入收藏
小代帅帅
Rank: 1
来 自:北京昌平
等 级:新手上路
帖 子:92
专家分:7
注 册:2013-5-11
结帖率:89.66%
收藏
已结贴  问题点数:5 回复次数:7 
强制类型转换问题
真是头疼啊,有哪位大神帮忙看一下,输出结果为什么是p和4464,他是怎么转换的呢?请帮忙细致分析一下。谢谢
#include<stdio.h>
int main(void)
{
    char c;
    short int i;
    float z=70000;
    c=(char)z;
    i=(short)z;
    printf("%c\n",c);
    printf("%ld\n",i);
    return 0;
}
搜索更多相关主题的帖子: return 
2013-12-04 15:31
zhaogay
Rank: 7Rank: 7Rank: 7
来 自:宫
等 级:黑侠
帖 子:151
专家分:586
注 册:2013-10-10
收藏
得分:0 
70000的二进制:
1 0001 0001 0111 0000 -》112 -- 'p'
1
0001 0001 0111 0000 -> 4464
不知道有木有关系

好好学习,天天想上
2013-12-04 16:02
kajj_0321
Rank: 2
等 级:论坛游民
帖 子:47
专家分:93
注 册:2013-10-23
收藏
得分:5 
回复 楼主 小代帅帅
int型数值赋给char型变量时,只保留其最低8位,高位部分舍弃。

70000的二进制去后八位是01110000=112=p;

long型数据赋给int型变量时,将低16位值送给int型变量,而将高16 位截断舍弃.


70000 超过了int了。你自己试着转换下吧。


这里有个前提就是int占2个字节,还请大侠赐教

[ 本帖最后由 kajj_0321 于 2013-12-4 16:08 编辑 ]

kajj->1314 努力每一天。
2013-12-04 16:03
kajj_0321
Rank: 2
等 级:论坛游民
帖 子:47
专家分:93
注 册:2013-10-23
收藏
得分:0 
回复 2楼 zhaogay
去掉最高位后面的16位就是4464,

kajj->1314 努力每一天。
2013-12-04 16:06
zhaogay
Rank: 7Rank: 7Rank: 7
来 自:宫
等 级:黑侠
帖 子:151
专家分:586
注 册:2013-10-10
收藏
得分:0 
1 0001 0001 0111 0000 -> 4464染色没染好

好好学习,天天想上
2013-12-04 16:07
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:0 
z=70000
shaort int 的范围是 -32768~32767,或者说是一个循环 是 65536

先说 i=(short)z;吧    明显数据溢出,所以70000-65536=4464,这个比较容易理解

那么 那个 p是怎么输出的呢?  c=(char)z;

这是 float 向 char 转换,可以理解为高级转换到低级,之间需要把float先转换为int类型(由上可知转换结果为4456)
然而ASCII码范围只有 8 位(也就是0-255),所以只取4456的后 8 位
4456 的二进制形式为 00010001 01110000   ,后 8 位是 01110000,也就是112,也就是 p 的ASCII码


三十年河东,三十年河西,莫欺少年穷!
2013-12-04 16:10
小代帅帅
Rank: 1
来 自:北京昌平
等 级:新手上路
帖 子:92
专家分:7
注 册:2013-5-11
收藏
得分:0 
回复 5楼 zhaogay
哈哈,不要伤心,谢谢你啦

别用你的常规和常识来诋毁我卓越的创造力和另类的行为······
2013-12-04 16:10
小代帅帅
Rank: 1
来 自:北京昌平
等 级:新手上路
帖 子:92
专家分:7
注 册:2013-5-11
收藏
得分:0 
回复 6楼 韶志
谢谢!!

别用你的常规和常识来诋毁我卓越的创造力和另类的行为······
2013-12-04 16:12
快速回复:强制类型转换问题
数据加载中...
 
   



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

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