zoukankan      html  css  js  c++  java
  • C++查看大端小端模式

    在学习计算机组成原理的时候,看到大端小端模式,便想实验一下,首先介绍一下 C 中的union,这个平时用得少,估计在单片机这种可能会运用,在平时写代码的时候几乎是用不着union的。


    union:联合

    • 联合从外观上看上去和结构体差不过,都是多种数据构成的集合。
    1 union number
    2 { /*定义一个联合*/
    3     int i;
    4     char b;
    5 };
    • 其最大的特点:所有的元素共享同一块地址空间(起始地址一致),该union定义的变量,其长度就是union中长度最大元素的长度。
    • 为union中一个元素赋值就是为该块内存空间重新赋值,所有元素的取值全部发生变化。

     通过下面这个程序能够检验大端/小端:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 void SysCheck()
     5 {
     6     union IsLitte_Endian
     7     {
     8         int i;
     9         char c;
    10     };
    11     IsLitte_Endian Check;
    12     Check.i = 1;
    13     bool Flag = Check.c == 1;    //Flag为true表示是小端模式,Flag为false表示为大端模式,此时Flag为true。
    14     cout << Flag;
    15     return;
    16 }
    17 
    18 int main() {
    19     SysCheck();
    20 }
    1. 定义了一个union,里面具有int i (32bit) , char c (8bit) ;
    2. 为 i 赋值1,按照16进制写: 0x0001H;
    3. 如果按小端存储,那么低位1,会放在首地址,char c占用1B,因此c的值为1;如果按照大端存储,那么低位为0,放在高地址,c的值为1;

    再用一个例子加深理解:

     1 #include <stdio.h>
     2 int main()
     3 {
     4     union number
     5     { /*定义一个联合*/
     6         int i;
     7         struct
     8         { /*在联合中定义一个结构*/
     9             char first;
    10             char second;
    11         }half;
    12     }num;
    13     num.i = 0x4241; /*联合成员赋值*/
    14     printf("%c%c
    ", num.half.first, num.half.second);
    15     num.half.first = 'a'; /*联合中结构成员赋值*/
    16     num.half.second = 'b';
    17     printf("%x
    ", num.i);
    18     getchar();
    19    return 0;
    20 
    21 }

    经过第一个实验,发现我的编译器是按照小端模式进行处理。

    1. num.i=0x4241,根据小端模式,first对应0x41H,second对应0x42H。  分别对应ASCII字符 'A','B'。
    2. 对first和second进行赋值(十进制赋值),‘a’=61,'b'=62,因此最终结果是6261。
  • 相关阅读:
    HDU 1009 FatMouse' Trade
    python正则表达式
    Python学习week5
    Python学习week4
    Python学习week3
    Python学习week2
    Python学习week1
    生活的艰辛(最小割,最大密度子图)
    最大获利(最小割,最大权闭合图,最大密度子图)
    最大密度子图
  • 原文地址:https://www.cnblogs.com/yy-1046741080/p/11537665.html
Copyright © 2011-2022 走看看