zoukankan      html  css  js  c++  java
  • 用Union体测试处理器大小端

    如何将多个字节安排到内存中去?大端对齐和小端对齐两种方式

    大端模式Big_endian):字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。(查看内存通常是:左高右低)int i=1; BE: 00 00 00 01

    小端模式Little_endian):字数据的高字节存储在高地址中,而字数据的低字节则存放在低地址中 。int i=1; LE: 01 00 00 00

    利用union类型数据的特点:所有成员的起始地址一致。对 union 型的成员的存取都是相对于该联合体基地址的偏移量为 处开始, 也就是联合体的访问不论对哪个变量的存取都是从 union 的首地址位置开始。

    例一: 

    ①将int型成员赋值为1;

    ②获取char型成员值

    ③如果取低地址值为1则是小端模式,如果取低地址值为0则是大端模式。

     1 int checkSystem( )
     2 {
     3    union check
     4    {
     5      int i;
     6      char ch;
     7    } c;
     8 c.i = 1;
     9 return (c.ch ==1);
    10 }

    例二:

    ①定义一个共用体变量:union A a1;

    ②对共用体a1.s赋值为0x1234

    ③由于共用体成员共用内存,则读取成员变量as.c[0]值,如果是0x34则是小端模式,如果是0x12则是大端模式

    1 union A
    2 {
    3     short s;
    4     char c[2];
    5 };

    参考链接:

    https://www.bilibili.com/video/BV12J41157Z1?from=search&seid=7908928799004699814

    参考资料:

    《C语言深度剖析》

  • 相关阅读:
    BZOJ1176: [Balkan2007]Mokia
    BZOJ1251: 序列终结者
    BZOJ1087: [SCOI2005]互不侵犯King
    Mike and gcd problem CodeForces
    Bank Hacking CodeForces
    Ilya And The Tree CodeForces
    欢迎使用CSDN-markdown编辑器
    Folding UVA
    Cake slicing UVA
    Headmaster's Headache UVA
  • 原文地址:https://www.cnblogs.com/darren-pty/p/14194788.html
Copyright © 2011-2022 走看看