zoukankan      html  css  js  c++  java
  • 计算机大端小端存储理解

    #include <iostream>
    
    // (short)(x) & (short)0x00ffU 的结果再左移8位<< 8 ,即取低8位再左移8位后变为高8位
    // (short)(x) & (short)0xff00U 的结果再右移8位>> 8 ,即取高8位再右移8位后变为低8位
    #define sw16(x) (short) ( ((short)(x) & (short)0x00ffU ) << 8 | ((short)(x) & (short)0xff00U)>>8 )
    
    using namespace std;
    
    int main() {
        //0x十六进制2位数占用一个字节(一个字节即8位bit)
        //计算机内存分配是以字节为单位的,比如只申请1位bit会给你分配一个字节即8位哦
        //所以对于内存分配,我们只谈字节不谈位。对于按位计算才考虑位bit。
        //unsigned int 有4个字节空间
        unsigned int value = 0x12345678;//0x12一个字节,0x34一个字节,0x56一个字节,0x78一个字节
    
        unsigned char buf[4] = {0};//申请4个字节
        //大端:低地址存放高字节
        buf[0] = 0x12;/*0x12高字节*/
        buf[1] = 0x34;
        buf[2] = 0x56;
        buf[3] = 0x78;
        printf("大端buf结果:0x%x%x%x%x
    ", buf[0], buf[1], buf[2], buf[3]);
    
        //小端:低地址存放低字节
        buf[0] = 0x78;/*0x78低字节*/
        buf[1] = 0x56;
        buf[2] = 0x34;
        buf[3] = 0x12;
        printf("小端buf结果:0x%x%x%x%x
    ", buf[0], buf[1], buf[2], buf[3]);
    
        short int x;//2个字节
        char x0, x1;
        x = 0x1122;
        //数据寻址时用的都是低位字节的地址,即从0号地址开始数据寻址。
        x0 = ((char *) &x)[0]; //低地址单元,需要转为(char*)指针再取值不然指针步长不正确
        x1 = ((char *) &x)[1]; //高地址单元,同样需要转为(char*)指针再取值。指针步长才正确。
        printf("x0=x%x
    ", x0);//低地址单元,我的计算机输出结果是低字节0x22,所以是低地址存放低字节,是大端存储。
        printf("x1=x%x
    ", x1);//我的计算机输出结果是高字节0x11
        printf("大小端转化前x的值=x%x
    ", x);
        printf("大小端转化后x的值=x%x
    ", sw16(x));
        return 0;
    }
    
  • 相关阅读:
    Chrome扩展开发之一——Chrome扩展的文件结构
    Chrome扩展开发(Gmail附件管理助手)系列之〇——概述
    Springfox与swagger的整合使用
    Maven的简单使用
    关于接口功能自动化的思考
    发版流程优化备忘录
    Aho-Corasick 自动机 学习笔记
    Luogu P1495 曹冲养猪
    Luogu P2670 【扫雷游戏】
    1.1 整除
  • 原文地址:https://www.cnblogs.com/yongfengnice/p/14434147.html
Copyright © 2011-2022 走看看