C语言⼤⼩端模式对 union 类型数据有什么影响?

一、问题

        计算机都是以⼋位⼀个字节为存储单位的,所以⼀个 16 位的整型就存在两种可能的存储顺序:⼤端模式和⼩端模式。那么⼤⼩端模式对共⽤体类型中的数据存储又有什么影响呢?

二、解答

1.⼤⼩端模式概述

        考虑⼀个 int 型整数 29,将此整数转换为⼗六进制数为 0x3239 ,其中 0x32 为⾼位, 0x39 为低位。那么这个⼗六进制数在内存中可能有两种存储⽅式:

(1)⼤端模式存储。

        ⾼位 0x32 存放在低地址 0x1000 中,低位 0x39 存放在⾼地址 0x1001中。结果如图所示。

(2)⼩端模式存储。

        ⾼位 0x32 存放在⾼地址: 0x1001 中,低位 0x39 存放在低地址 0x1000 中。结果如图所示。

        ⼤端模式 (Big_endian)的含义就是字数据的⾼字节存储在低地址中,⽽字数据的低字节则存放在⾼地址中。⼩端模式  (Littleendian) 的含义就是字数据的⾼字节存储在⾼地址中,⽽字数据的低字节则存放在低地址中。

2.举例说明⼤⼩端模式对共⽤体类型数据的影响

        union 型数据所占的内存等于其最⼤的成员所占的内存,对 union 型的成员的存取都是相对于该联合体基地址的偏移量为 0 处开始,也就是联合体的访问⽆论对哪个变量的存取都是从 union 的⾸地址位置开始,因此⼤⼩端模式的存储将会直接影响 union 成员的值。

        例如,在主函数中声明⼀个联合体类型 u ,定义⼀个 union u 类型的变量 t ,引⽤ t 中的整型变量 i ,为其赋值为 1 ,若引⽤字符输出,显示 1 说明此系统的存储⽅式是⼩端模式,输出 0 说明该系统的存储⽅式是⼤端模式。相应代码如下。

main()
{
    union u
    {
        int i;
        char ch;
    } t;
    t.i = 1;
    printf("%d\n", t.ch);
}

        程序运⾏结果如下所示。

1

三、总结

        上述例⼦还可以验证当前系统的存储模式。由运⾏结果可以看出,当前系统的存储模式为⼩端模式,即⾼字节存放在⾼地址中,低字节存放在低地址中。

相关推荐

  1. unionc语言什么用途

    2024-05-12 13:30:02       46 阅读
  2. C++C语言数据类型的扩展

    2024-05-12 13:30:02       62 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-12 13:30:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-12 13:30:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-05-12 13:30:02       82 阅读
  4. Python语言-面向对象

    2024-05-12 13:30:02       91 阅读

热门阅读

  1. 安全架构设计理论与实践

    2024-05-12 13:30:02       31 阅读
  2. 【WPF】聊聊WPF中INotifyPropertyChanged [TOC]

    2024-05-12 13:30:02       27 阅读
  3. 使用poi生成word文件时,zip相关的报错

    2024-05-12 13:30:02       26 阅读
  4. Spring Boot进阶 - 实现自动装配原理

    2024-05-12 13:30:02       34 阅读
  5. proxySQL 安装与配置

    2024-05-12 13:30:02       29 阅读