假设在一个32位的 little endian的机器上运行下面程序,输出结果:1 0 2

#include<stdio.h>
int main() {
long long a=,b=,c=;
printf("%d %d %d\n",a,b,c);
return ;
}

分析:

1 printf()是一个库函数,C,C++中函数的参数是从右往左入栈的;

2 栈的生长方向是从高往低的

3 小端模式是低位存储在低字节

4 %d格式输出的是4个字节大小,而long long为8个字节

所以,a=1,b=0,c=2

补充:栈是高地址到低地址增长,入栈就反过来了。

分析二: 
printf函数的原型是printf(const char*,...); 
第二个参数是任意个数目的参数,所以printf函数不是分个把参数入栈,而是一股脑全部压入堆栈,因此对于8字节的数据来说,堆栈中的数据是1000 0000 2000 0000 3000 0000,%d按四字节输出,因此,第一个%d输出1,第二个%d输出0,第三个%d输出2。 
如果改成printf("%d  ", a);printf("%d  ", b);printf("%d\n", c);那结果就是1,2,3. 
 
分析三:

little endian指低位字节排放在内存的低地址端(就是起始地址)

long占8个字节,假设其实地址是0,一个地址存一个字节,按照地位编址1,2会按照如下方式存储

地址 0 1 2 3 4 5 6 7 8 ...

内容 1 0 0 0 0 0 0 0 2 ...

%d只能按照四字节连续输出

那么第一个输出的便是0001=1 第二个输出0000=0 第三个输出0002

最新文章

  1. 一些SQL
  2. 异步等待(ManualResetEvent
  3. [转]PHP 获取服务器详细信息代码
  4. c# 使用正则表达式 提取章节小说正文全本篇
  5. C++ STL map
  6. 学习VC MFC开发必须了解的常用宏和指令
  7. CodeForces 158B Taxi(贪心)
  8. classes目录中没有class文件的一个原因
  9. openssl 1.1.1 reference
  10. Visual Studio AI环境记录(Windows10)
  11. Oracle测试环境参数调整.
  12. String拼接字符串效率低,你知道原因吗?
  13. Dubbo集群配置和官方文档
  14. MongoDB 基本语法笔记
  15. python学习之re库
  16. eclipse导入项目文件以及 import项目文件后有个红色感叹号
  17. 使用Openssl的AES加密算法
  18. C# 输入一个整数,求质因数
  19. Shell 学习笔记之运算符
  20. (转)Linux服务器SNMP常用OID

热门文章

  1. SQLSERVER中order by ,group by ,having where 的先后顺序
  2. HTML切换页面IE版本
  3. 从bios启动说起
  4. openwrt如何单独编译uboot
  5. hdu 3698 UVA1490 Let the light guide us 线段树优化DP
  6. Https流程,openssl本地自建证书,抓包
  7. FJNUOJ the greed of Yehan(最长路 + 权值乘积转化)题解
  8. hibernate与mybatis的区别和应用场景
  9. UVa 1626 括号序列(矩阵连乘)
  10. MVC ---- T4(1)