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

    在X86体中 数字是以小端形式存在 的

     小端的意思就是高字节 在高(内存) 地址,低字节在低(内存)地址

    而大端正好相反 ,其 高字节 在低(内存)地址, 低字节 在高(内存)地址

    例如 

    int a=1;

    int 在32位或64位机 中都是4个字节,即 00000000 00000000 00000000 00000001

    第一组00000000 属于高字节

    高字节 在内存高地址, 

    内存低地址                                                                               内存高地址            

    ---------------------------------------------------------------------------------------------->

    000000001 00000000 00000000 00000000

    用一个程序证明下

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(){
        int a=1;
    
        char b[4];
        b[0]= (char)a;
        b[1] = (char)(a>>8);
        b[2] = (char)(a>>16);
        b[3] = a>>24;
    
        int c=0;
        c = (int)b[0] | (int)b[1] <<8 | (int)b[2] << 16| (int)b[3];
        printf("转后的数值为%d
    ", c);
        return 0;
    }

    (gdb) p a
    $1 = 1

    (gdb) p &a
    $3 = (int *) 0x7fffffffe4cc
    (gdb) x/4bu 0x7fffffffe4cc
    0x7fffffffe4cc: 1 0 0 0

    转后的数值为1

    如果要通过程序存储为大端模式呢

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(){
        int a=1;
    
        char b[4];
        b[0]=(char)a>>24;
        b[1]=(char)a>>16;
        b[2]=(char)a>>8;
        b[3]=(char)a;
    
        int c=0;
        c = (int)b[0]<<24 | (int)b[1] <<16 | (int)b[2] << 8| (int)b[3];
        printf("转后的数值为%d
    ", c);
        return 0;
    }

    (gdb) p b
    $1 = "00000001"
    (gdb) p &b
    $2 = (char (*)[4]) 0x7fffffffe4c0
    (gdb) x/4bu 0x7fffffffe4c0
    0x7fffffffe4c0: 0 0 0 1

  • 相关阅读:
    windows运行shell脚本
    Android Webview H5资源本地化
    Vscode开发Python环境安装
    Vscode开发Java环境搭建
    为什么索引可以提高效率?
    Java内存模型
    栈和队列----向有序的环形单链表中插入新节点
    栈和队列----单链表的选择排序
    栈和队列----将搜索二叉树转换成双向链表
    栈和队列----在单链表中删除指定值的节点
  • 原文地址:https://www.cnblogs.com/taek/p/7521137.html
Copyright © 2011-2022 走看看