分析下列程序,输出结果(AC)

#include<stdio.h>
#include<stdlib.h>
union X{
	int32_t a;
	struct {
		int16_t b;
		int16_t c;
	};
};
int main() {
	X x;
	x.a=0x20150810;
	printf("%x,%x\n",x.b,x.c);
}

  A 2015,810    B50810,201    C810,2015    D20150,810

 

分析: Little-Endian: 低地址存放低位、Big-Endian: 低地址存放高位

32bit宽的数0x12345678

 

在Little-endian模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:

                                          内存地址     0x4000     0x4001     0x4002     0x4003
                                          存放内容     0x78        0x56        0x34         0x12
而在Big- endian模式CPU内存中的存放方式则为:
                                          内存地址     0x4000     0x4001     0x4002     0x4003
                                          存放内容     0x12         0x34        0x56         0x78

 

0x20150810

如果按照大端模式存储:从低地址到高地址:20 15 08 10

                                  输出从低地址到高地址:20 15 08 10

如果按照小端模式存储:从低地址到高地址:10 08 15 20 

                                  输出从高地址到低地址:08 10 20 15

 

为什么小端序是从高地址输出,大端序是从地低地址输出?

因为你的存储顺序都不同,如果按照相同的方式读取(比如从高到低),那读取来的结果就有两种可能,那么必有一种错了啊。题里是把一个int读成两个short,所以有两种可能。但是假如int读成int,无论是大端小端,绝对仅由一种结果。

 

---------------------------------------------------------------------------------------------------------------------------

#include<stdio.h>
int fun(char s[]) {
	char *p=s;
	while(*p!=0)	p++;
	return (p-s);
}
main() {
	printf("%d\n",fun("OABCDEF"));
}

  最后输出结果是7.

 

------------------------------------------------------------------------------------------------------------------------

一个算法应该具有以下五个重要的特征:   

1、有穷性: 一个算法必须保证执行有限步之后结束;   

2、确切性: 算法的每一步骤必须有确切的定义;   

3、输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件;   

4、输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;   

5、可行性: 算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。

 

posted on 2017-08-02 22:47  王小东大将军  阅读(188)  评论(0编辑  收藏  举报