大小端模式初解

1.通过代码,查看计算机是小端模式还是大端模式。

这里使用了联合体union

联合体的大小是联合体所包含的最大的数据类型的大小。

int在这里是最大的数据类型(4字节)

char比int小一半(2字节)

当取union中的int时,取到整个union (1000 00002)

当取union中的char时,取到地址较低的部分(1000 或者 0002)

那么地址较低的部分是int中地址较高部分还是地址较低部分,就可以看出机器的存储方式了。

小端:低位地址存放数据的低位     比如:0x1000 0002 存放为 0002 1000 (数据高位1000 存放在高位地址(靠后))

大端:低位地址存放数据的高位     比如:0x1000 0002 存放为 1000 0002   (数据高位1000 存放在低位地址(靠前))


#include <iostream>
using namespace std;

union 
{
    int number;
    short s;
}test;

bool testBigEndin()
{
    test.number=0x01000002;
    return (test.s==0x01);
    /*
     ox 0100(高地址)  0002(底地址)
     大端:0100(底地址存高位)  0002(高地址存低位)
小端:0002(底地址村低位)  0100(高地址存高位) 
    */
}

int main()
{
    if (testBigEndin())     
        cout<<"big"<<endl;
    else 
        cout<<"small"<<endl;
return 0;   
}





2.计算机中数据的存放形式:

* 字符用asci码存放。int用补码,unsigned 用原码。注意机器的大小端法,字节顺序不一样的。又int是4个字节的。

* cpu架构决定了大小端模式,大端模式其实是平时生活中书写数字的顺序,先写高位,再写低位。

* 无论大小端,在取数时候是根据硬件将数据进行相应转换到可以正常使用的数据,这是依赖于硬件的。没有数据加载/存储的开销。






3.杂记
编译器会根据不同的变量类型生成不同的指令. 例如
int a;
char c;
a = 100;
c = 100;
编译器知道a,c的类型, 可能会生成如下指令
mov DWORD PTR[EBP+8], 100
mov BYTE PTR[EBP+12], 100
运行时, CPU硬件逻辑根据指令中不同的操作码来产生不同的行为.


参考自:

https://blog.csdn.net/yiyeguzhou100/article/details/48381937    cpu架构决定大小端

https://www.cnblogs.com/diligenceday/p/5770783.html    基本数据类型


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值