user-0 提问: 问一个关于大端小端存储模式的问题

回复:
user: user-0
content: 引用 13 楼 zhao4zhong1 的回复:理解和讨论之前请先学会如何观察！  计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。 （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）        大端   0xbfae 0x4d68  a[0] 小端   0x4d68 0xbfae  a[0]

user: user-1
content: 理解和讨论之前请先学会如何观察！  计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。 （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）

user: user-2
content: 引用 11 楼 qq_31510849 的回复:[quote=引用 10 楼 bluewanderer 的回复:] 这是题？谁出的把谁拖出去用板砖拍死去... （题外话，话说那个i是啥？）  如果a的地址是0xbfae4d68那不管大小端打印都是bfae4d68，另外你到底想打印a还是a[0]？  a[1]，是我打错了，打出a[0]的大小端存储，用内存结构示意图[/quote]  我大概明白了... 本来题目是让你写一个我那样的东西，结果你凌乱了，以为你写的那个就是题目要求的，并且认为你输出的结果是和题目有关的...

user: user-3
content: 大端模式又叫高位优先，是指数据的高位保存在低地址中 小端模式有叫做低位优先，是指数据的低位保存在低地址中。 大端模式的检测代码可以如下完成：  short tmp=0x1122; if(((char *)&tmp)[0]=0x11) { //高位优先，大端模式 }

user: user-0
content: 引用 10 楼 bluewanderer 的回复:这是题？谁出的把谁拖出去用板砖拍死去... （题外话，话说那个i是啥？）  如果a的地址是0xbfae4d68那不管大小端打印都是bfae4d68，另外你到底想打印a还是a[0]？  a[1]，是我打错了，打出a[0]的大小端存储，用内存结构示意图

user: user-2
content: 这是题？谁出的把谁拖出去用板砖拍死去... （题外话，话说那个i是啥？）  如果a的地址是0xbfae4d68那不管大小端打印都是bfae4d68，另外你到底想打印a还是a[0]？

user: user-0
content: 引用 8 楼 bluewanderer 的回复:那压根就是一个不确定的地址，而且根本不受大小端影响...  所以这道题就是这么回答的？ a[0]以大端存储模式输出的话就是bf ae 4d 68 小端就是 68 4d ae bf?

user: user-2
content: 那压根就是一个不确定的地址，而且根本不受大小端影响...

user: user-0
content: 引用 6 楼 bluewanderer 的回复:[quote=引用 5 楼 qq_31510849 的回复:] [quote=引用 4 楼 bluewanderer 的回复:] #include <stdio.h>  int main() { 	unsigned short a = 0x0100;  	printf("%d\n", ((unsigned char *)&a)[0]); }  大端输出1，小端输出0       我是想搞懂为什么0X12345678会变成那个结果[/quote]  根本和0x12345678没半毛钱关系啊，赋值前就已经输出了啊[/quote]    那么a[0]以大端存储模式输出的话就是bf ae 4d 68 小端就是 68 4d ae bf?

user: user-2
content: 引用 5 楼 qq_31510849 的回复:[quote=引用 4 楼 bluewanderer 的回复:] #include <stdio.h>  int main() { 	unsigned short a = 0x0100;  	printf("%d\n", ((unsigned char *)&a)[0]); }  大端输出1，小端输出0       我是想搞懂为什么0X12345678会变成那个结果[/quote]  根本和0x12345678没半毛钱关系啊，赋值前就已经输出了啊

user: user-0
content: 引用 4 楼 bluewanderer 的回复:#include <stdio.h>  int main() { 	unsigned short a = 0x0100;  	printf("%d\n", ((unsigned char *)&a)[0]); }  大端输出1，小端输出0       我是想搞懂为什么0X12345678会变成那个结果

user: user-2
content: #include <stdio.h>  int main() { 	unsigned short a = 0x0100;  	printf("%d\n", ((unsigned char *)&a)[0]); }  大端输出1，小端输出0

user: user-0
content: 引用 1 楼 bluewanderer 的回复:输出个栈里的地址能有什么用？  直接把一个多字节的变量当字节数组把第一个元素读出来看是高字节还是低字节不就成了。 什么意思，我刚学这个方面，如何读取？

user: user-0
content: 什么意思，我刚学这个方面，有点不太清除

user: user-2
content: 输出个栈里的地址能有什么用？  直接把一个多字节的变量当字节数组把第一个元素读出来看是高字节还是低字节不就成了。