| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 526 人关注过本帖
标题:很久不来打扰各位。今天又来请教各位了。
只看楼主 加入收藏
q452227361
Rank: 1
等 级:新手上路
帖 子:16
专家分:4
注 册:2015-4-1
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:5 
很久不来打扰各位。今天又来请教各位了。
程序代码:
/*题目:*/
/*尽管这个练习的程序依赖于系统,但它可以在许多不同的系统中正确的运行。*/
/*请解释这个程序所完成的任务。如果你不明白它所打印出来的短语是什么意思,你可以请教经验丰富的C程序员*/
#include<stdio.h>
#if(VAX||PC)
#define        HEX0    0x6c6c6548
#define        HEX1    0x77202c6f
#define        HEX2    0x646c726f
#define        HEX3    0x00000a21
#else
#define        HEX0    0x48656c6c
#define        HEX1    0x6f2c2077
#define        HEX2    0x6f726c64
#define        HEX3    0x210a0000
#endif

typedef    union{
    char what[16];
    long cjpher[4];
}mystery;

int main(void)
{
    mystery        x;
    x.cjpher[0]=HEX0;
    x.cjpher[1]=HEX1;
    x.cjpher[2]=HEX2;
    x.cjpher[3]=HEX3;
    printf("%s",x.what);
    putchar('\n');
    return 0;
}[local]1[/local]


看不懂.jpg (479.52 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 模型 
2015-05-28 20:46
q452227361
Rank: 1
等 级:新手上路
帖 子:16
专家分:4
注 册:2015-4-1
收藏
得分:0 
不知道这些十六进制格式的东西是什么意思。这些内容百度也不好使。各位经验丰富的程序员不要走开哦,指点一下吧
2015-05-28 20:48
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:3 
找张ascii码表就明白了。

重剑无锋,大巧不工
2015-05-28 20:58
calix
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:28
帖 子:249
专家分:1442
注 册:2015-5-4
收藏
得分:3 
根据union的存储共用的特点,将cjpher中的数据用what以字符串形式打印出来
将16进制翻译成ascii表中对应的字符就行了
2015-05-28 22:27
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
收藏
得分:3 
机器语言转高级语言  是英文单词 hello world.
main函数 写得有问题

学C语言从底层开始,学编程从问题开始,一日学会C!!!
2015-05-28 22:51
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
收藏
得分:3 
    考虑不同的机器型号,打印出“Hello World!"字符串,但程序的预处理对于机器型号的判定似乎反了。
    其实判定机器型号,也就是考虑到不同的机器在存储上的不同处理,有的是大尾(正序)的存储方式,有的是小尾(逆序)的存储方式。
    大尾(正序)的存储方式是高位字节存入低地址,低位字节存入高地址;小尾(逆序)的存储方式是低位字节存入低地址,高位字节存入高地址。
    如0x6c6c6548,按大尾的存储方式存储在存储单元中的形式就是“6c6c6548”(这里以十六进制形式给出,实际是以二进制形式存储的),而按小尾的方式存储在存储单元中的形式就是“48656c6c”(同样以十六进制形式给出,实际以二进制形式存储)。
    程序中先是将4个16进制数据赋给包含4个长整型元素的数组,然后再以字符的形式打印在屏幕上,因为字符型数据占据一个字节,所以它是以一个字节为单位进行输出的,即从低地址开始一个字节一个字节地将存储单元中的内容输出。
    所以为了在不同的机器平台上正确的打印出“Hello World!”,就有了这段程序中判定机器型号的预处理。
    希望以上的分析能够帮到楼主!
2015-05-28 23:28
快速回复:很久不来打扰各位。今天又来请教各位了。
数据加载中...
 
   



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

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