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

  • 相关阅读:
    js变量类型
    js词法分析
    ORACLE 查找字段在哪些表里存在
    主外键约束的关闭和启用
    pl/sql developer 编码格式设置(转)
    WIN7 Net Configuration Assistant打不开
    Kettle 连接失败 Oracle 数据库报 ora-12505 的解决方法(转)
    正则表达式30分钟入门教程(转)
    设置程序的多个入口,进行动态的显示
    应用多入口配置
  • 原文地址:https://www.cnblogs.com/taek/p/7521137.html
Copyright © 2011-2022 走看看