大端模式与小端模式
来源:互联网 发布:qq手机骂人软件 编辑:程序博客网 时间:2024/06/11 16:20
大端模式与小端模式
有时候,用C语言写程序时需要知道是大端模式还是小端模式。
为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如果将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。
高数据位与低数据位
inta=46178;
00000000 0000 0000 1011 0100 0110 0010 二进制
左侧是数据高位,向右依次降低。
重点在理解这个高低位
4字节内存地址
这是一个整型4字节内存,a要存在这段内存中,内存地址顺序递增,由低地址位 递增 到高地址位。
大端存储:字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中;
误区:数据不是原模原样存进去,是按二进制形式存储的。
比如:int a=46178;不是1占一个字节,2占一个字节,3占一个字节,4占一个字节。
小端存储:(小高高,小低低),字数据的高字节存储在高地址中,而字数据的低字节则存放在低地址中;
测试我们系统大小端的存储方法:思路就是看第一个字节的值是多少。一般使用联合体测试。
联合体特点:所有成员起始地址一致,所有成员引用的是内存中的相同位置。
测试用例
#include<stdio.h>
#include<windows.h>
/////////////////////////////////////
//////大端模式与小端模式测试////////
///////////////////////////////////
int main()
{
//(方法1)联合体
union
{
inta;
chararray[4];
}b = {46178 };
printf("%d,%d,%d,%d", b.array[0], b.array[1], b.array[2],b.array[3]);
//(方法2)法类型转换
inta = 46178;
char*p = (char*)&a;
printf("%d,%d,%d,%d",*p,*(p+1),*(p+2),*(p+3));
//方法1与方法2运行结果: 98,-76,0,0
//数据的低数据位放在内存的低地址,故本机器为小端模式存储
//X86一般为小端存储
system("pause");
return0;
}
////测试函数
int CheckSystem()
{
union check
{
inti;
charch;
}c;
c.i = 1;
return(c.ch == 1);
}
- 大端模式与小端模式
- 大端模式与小端模式
- 大端模式与小端模式
- 大端模式与小端模式
- 小端模式与大端模式
- 大端模式与小端模式
- 大端模式与小端模式
- 大端模式与小端模式
- 大端模式与小端模式
- 大端模式与小端模式
- 关于大端模式与小端模式
- 大端模式与小端模式
- 大端模式与小端模式
- 大端模式与小端模式
- 大端模式与小端模式
- 大端模式与小端模式
- 大端模式与小端模式
- 大端模式与小端模式
- 1015. Reversible Primes 解析
- mac下android studio一直refreshing "xxx" gradle project问题解决
- UML类图几种关系的总结
- rc文件如果加上自己的宏定义怎么办
- VC编译错误?
- 大端模式与小端模式
- 关于一个变量值的问题
- HMENU问题
- JAVA POI的初步使用(持续更新)
- qt 使用QPainter绘图
- HOOK截获中文输入会出现响应多次的情况
- 最流行的Android组件大全
- XML Parser Error on line 1: 不允许有匹配 "[xX][mM][lL]" 的处理指令目标。
- CodeForces - 747A