大小端存储的理解
2015-12-08 15:49
183 查看
在计算机内存中的数据存储的都是机器二进制序列,在学习c/c++语言的时候会定义到一些变量,比如
int(整形)、char(字符型).....但是在计算机中是怎样存储的呢?
计算机的内存地址是有高低之分的,那么一个整形数在内存中占有四个字节它又是怎样存储的呢?是低
位放在低地址,还是低位放在高地址?在这里我们可以通过一个小小的c程序来进行验证一下:
首先来看一下计算机中是怎样存储1这个数的,1的二进制序列是00000000 00000000 00000000 00000001
假设计算机给这个整形数1分配的四个字节的内存空间是0-3,而这个程序打印的内容是最低地址上的内
容,结果是1,所以可以得出以下结论:
内存地址 0 1 2 3
内存内容00000001 00000000 00000000 00000000
或者举一个十六进制数的例子 假如定义的这个数是 0x11223344,那么结果便是这样的:
内存地址 0 1 2 3
内存内容 44 33 33 11
也就是低位是存在低地址里边的,这种模式就是计算机的小端存储模式。
相反如果结果是另一种情况:
内存地址 0 1 2 3
内存内容00000000 00000000 00000000 00000001
或者是十六进制数
内存地址 0 1 2 3
内存内容 11 22 33 44
这种模式就是另一种存储模式,称为大端存储
int(整形)、char(字符型).....但是在计算机中是怎样存储的呢?
计算机的内存地址是有高低之分的,那么一个整形数在内存中占有四个字节它又是怎样存储的呢?是低
位放在低地址,还是低位放在高地址?在这里我们可以通过一个小小的c程序来进行验证一下:
#include<stdio.h> #include<stdlib.h> int main() { int a=1; char *p = NULL; p = (char*)&a; printf("%x\n", *p); system("pause"); return 0;运行结果是 1
首先来看一下计算机中是怎样存储1这个数的,1的二进制序列是00000000 00000000 00000000 00000001
假设计算机给这个整形数1分配的四个字节的内存空间是0-3,而这个程序打印的内容是最低地址上的内
容,结果是1,所以可以得出以下结论:
内存地址 0 1 2 3
内存内容00000001 00000000 00000000 00000000
或者举一个十六进制数的例子 假如定义的这个数是 0x11223344,那么结果便是这样的:
内存地址 0 1 2 3
内存内容 44 33 33 11
也就是低位是存在低地址里边的,这种模式就是计算机的小端存储模式。
相反如果结果是另一种情况:
内存地址 0 1 2 3
内存内容00000000 00000000 00000000 00000001
或者是十六进制数
内存地址 0 1 2 3
内存内容 11 22 33 44
这种模式就是另一种存储模式,称为大端存储
相关文章推荐
- c语言怎么会有这么多的作用域?
- gets()函数和puts()函数的渊源关系
- 一个简单的三子棋游戏(c语言实现)
- break和continue语句
- c语言中递归函数真的好吗?
- c语言中对可变参数列表的简单理解
- c语言中统计二进制位中1的个数的算法优化
- c语言最强大之处--指针
- 字符串操作函数的编写
- Go语言几大命令简单介绍
- Volley
- <转载>WdatePicker日历控件使用方法
- 黑马程序员——Java之多线程(上)
- Spring:事务详解
- mono在ios平台的局限性
- Java学习----Java数据类型
- 设计模式 -- 单一原则
- ScrollView中顶部控件显示不完整
- Springmvc中使用redirect:list.do 时无法跳转
- UVA 11029 Leading and Trailing