西艾:X86结构下,下面代码输出结果是什么?
代码:
1: char str[20]="Good night";
2: int* p=(int*)str;
3: p[0]=0x61626364;
4: p[1]=0x31323334;
5: p[2]=0x41424344;
6: cout<<str<<endl;
解题:考察知识点:
(1)int的内存大小:32bit=4byte;char的内存大小:8bit=1byte;
(2)常用字符的ASCII 码,’a’:97;’A’=65;’0’=48;
(3)十六进制转,0x61=97;
(4)大小端模式:
所谓的小端模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。
所谓的大端模式,是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;
而X86结构为小端模式,所以
p[0]=0x61626364;//97,98,99,100对应a,b,c,d,小端存在字符串str则为dcba
p[1]=0x31323334;//同理4321
p[2]=0x41424344;//同理DCBA
代码输出:dcba4321DCBA
// 内存地址 是 由低 向 高 偏移, 0x1234 则是 低地址在后,高地址 在前,
大端 高地址 放在 低位 , 所有0x12 放在开始 ,0x34在后面 ,反之 小端。