先看下面的代码:

#include<stdio.h>

int main ()
{
int a;
char *x;
x = (char *) &a;
a = 512;
x[0] = 1;
x[1] = 2;
printf("%d\n",a); return 0;
} // 针对x86的处理器来说,其结果为513

  

原因

程序首先声明了一个int变量,在我的电脑中,此int占用4字节。然后声明了一个x指针,同样,在我的电脑中它占用8字节。然后将a的内存地址赋值给x指针,注意这里用到了类型转换:x=(char *) &a。如果不使用类型转换,x指向的int型的内存单元大小为4字节,如果使用了类型转换,x指向的char型的内存单元大小为1字节。

变量a的值为512,用4个字节的普通二进制表示就是:

    00000000 00000000 00000010 00000000

由于x86 CPU的字节序为小端序(最低有效位在最高有效位的前面),所以前面的二进制以小端序的表示方式为:

    00000000 00000010 00000000 00000000

操作方式是:先获取最右边的8位数字,然后放到新行的左边;然后获取下一个8位数字,再放到新行的左边,它紧挨着上一个8位数字。以此循环操作,直到数据读取完毕。注意的是一个字节(8位)里的数字顺序是不变的。

x[0]表示指向a内存区域的第一个字节,并设置为1,此时的a内存表示为:

    00000001 00000010 00000000 00000000

然后是x[1]设置为2,则a内存表示为:

    00000001 00000010 00000000 00000000

然后将a内存转为普通二进制表示方式(方式为从右到左读取):

    00000000 00000000 00000010 00000001

最后的结果为:

    513

最后修改时间:2018-01-26 19:55

最新文章

  1. Edge.js:让.NET和Node.js代码比翼齐飞
  2. recyleView使用笔记
  3. Vue2.0 + Element-UI + WebAPI实践:简易个人记账系统
  4. PLSQL Developer不支持Oracle 64位客户端解决方法
  5. NSRunLoop &amp;&amp; NSTimer
  6. HTMl5/CSS3/Javascript 学习推荐资源
  7. ASP.NET读取EXCEL文件的三种经典方法(转)
  8. FR #1题解
  9. 容联云通讯_提供网络通话、视频通话、视频会议、云呼叫中心、IM等融合通讯能力开放平台。
  10. 什么是image crop?
  11. 浅谈RFID电子标签封装技术
  12. hdoj 1286 找新朋友 【数论之欧拉函数】
  13. Qt4_VS10 程序打包发布
  14. TCP传输协议使用
  15. node基础篇二:模块、路由、全局变量课堂(持续)
  16. SqlServer优化:当数据量查询不是特别多,但数据库服务器的CPU资源一直100%时,如何优化?
  17. Jupyter Notebook
  18. 5.2、Android Studio截图
  19. jquery判断表单内容是否为空
  20. hdu2838树状数组解逆序

热门文章

  1. Unity里的人物驱动/换装备/换武器/换衣服/卡通重定位(转)
  2. python __builtins__ list类 (42)
  3. Windows API 搭建OpenGL窗口
  4. camshift.py OpenCv例程阅读
  5. 51Nod 1094 和为k的连续区间
  6. swiper.js插件的使用
  7. AtCoder Grand Contest 003 E - Sequential operations on Sequence
  8. AtCoder Regular Contest 083 E - Bichrome Tree
  9. Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) C
  10. centOS 部署服务器(二)