zoukankan      html  css  js  c++  java
  • 小端大端

    一:什么是大小端

    大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。
    小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。
     
    口诀:大相反(低位存高位),小相同(低位存低位),叉八六(X86计算机),必小端。
     
    举例:假如一个int类型数,十六进制(就是给人看的)表示为:0x0026F800
    那么,如果是小端机器,它在内存中就是:00F82600   (上面的低字节还是在低地址)  内存中地址在这种表示法从左往右由低地址到高地址。
       如果是大端机器,它在内存中就是 :0026F800 (所见即所得) (上面的低字节存到了高地址)
    大小端是以字节为单位的,因为内存中最小单元就是字节。
    #include <stdio.h>  
      
    typedef union un{   
     int i;  
     char ch[2];  
    } un;   
      
    int main()  
    {  
        un u;  
        u.ch[0] = 10;   
        u.ch[1] = 1;  
      
        printf("%d", (short)u.i);   
      
        return 0;  
    }  
    结果为:266
    解析:
    10 相当于 0000 1010     低地址
    1   相当于 0000 0001     高地址
    如果是小端模式,低地址存放高位,高地址存放低位,那么该值按照正常顺序书写就是: 0000 0001 0000 1010,结果为266。
    由于X86都是小端,所以在计算机上运行输出266;
     

    一个联合体题,不涉及大小端

    #include<iostream>  
    #include <string.h>  
    #include <malloc.h>  
    #include <stdio.h>  
    #include <stdlib.h>  
    #include <memory.h>  
    using namespace std;  
      
      
    typedef struct  AA    
    {  
        int b1:5;  
        int b2:2;  
    }AA;  
      
    int main()  
    {  
        AA aa;   
        char cc[100];  
        strcpy(cc,"0123456789abcdefghijklmnopqrstuvwxyz");  
        memcpy(&aa,cc,sizeof(AA));  
        cout << aa.b1 <<endl;  
       cout << aa.b2 <<endl;  
    }  

    这个题在位域的博客中说过http://www.cnblogs.com/13224ACMer/p/6298764.html

  • 相关阅读:
    Zabbix5 Frame 嵌套
    Zabbix5 对接 SAML 协议 SSO
    CentOS7 安装 Nexus
    CentOS7 安装 SonarQube
    GitLab 后台修改用户密码
    GitLab 查看版本号
    GitLab Admin Area 500 Error
    Linux 安装 PostgreSQL
    Liger ui grid 参数
    vue.js 是一个怪东西
  • 原文地址:https://www.cnblogs.com/13224ACMer/p/6298765.html
Copyright © 2011-2022 走看看