分析下列程序,输出结果(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、可行性: 算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。