首页 > 试题广场 >

有如下一段代码(unit16_t为2字节无符号整数,unit

[单选题]
有如下一段代码(unit16_t2字节无符号整数,unit8_t1字节无符号整数);
union X
{
    unint16_t a;
    struct Z
    {
        unint8_t m;
        unint8_t n;
    }z;
};
 
union X x;
x.a = 0x1234;
请问x.z.n在大字节序和小字节序机器上的值分别为多少()
  • 0x34,0x12
  • 0x12,0x34
  • 0x1234,0x1234
  • 0x1234,0
  • 0,0x1234
这个题到底问的是那个字母呀
发表于 2017-08-17 22:05:25 回复(2)
最清楚的解释:0x1234
0x12:高位
0x34:低位
结构体中,先声明的是低地址,后声明的是高地址
m:低地址
n:高地址
大端:低位放在高地址:0x34---->n
小端:高位放在高地址:0x12---->n
发表于 2018-11-15 12:13:10 回复(5)
问的是x.z.n 在大端小端机器上的值,记住大端和阅读习惯一致
所以大端是0x34,小端0x12
发表于 2017-08-18 13:44:20 回复(6)

unionX
{
unint16_t a;
structZ
{
unint8_t m;
unint8_t n;
}z;
};
union的基本知识:分配空间按成员最大的来
对齐的基本知识:对齐与补齐(不一样)
union x 存储空间为  m  n
                                  a
x.a = 0x1234;
小端模式    m   n
                  34   12
大端          m     n
                 12    34
x.z.n=12 (小) 34(大)

发表于 2018-05-11 16:53:01 回复(0)
由于栈的生长方向是从高地址向低地址,所以题目中的m是高地址,n是低地址。
而大端序是指权重高的数存放在低地址中,小端序相反(小端序才是符合阅读习惯的),
0x1234中,0x12 是高位,0x34是低位;
按照大端序高位存放在低地址,即0x12存放在n中;
小端序相反

发表于 2018-09-05 22:30:36 回复(3)

对于堆来讲,生长方向是向上的,也就是向着内存地址增加的方向;对于栈来讲,它的生长方式是向下的,是向着内存地址减小的方向增长。

union就是公用一块内存,在这道题中,a的内存与n和m的是在一起,而这是在栈中,栈中的内存分配是有大地址向小地址分配的,所以&m>&n,而大字节序就是一个字的高字节对应高地址,低字节对应低地址,所以m中应该是0x1234中的高字节部分12,而n中的是低字节部分34,小字节序于这个相反,所以答案就是0x34 ,0x12

发表于 2018-04-05 10:18:01 回复(2)
一位16进制数对应四位二进制数,一个byte等于8bite,等于两位16进制数,然后分大端小端,两者相反
发表于 2018-06-04 16:16:55 回复(0)

大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。

小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。

以unsigned int value = 0x12345678为例,分别看看在两种字节序下其存储情况,我们可以用unsigned char buf[4]来表示value

Big-Endian: 低地址存放高位,如下:

高地址
---------------
buf[3] (0x78) -- 低位
buf[2] (0x56)
buf[1] (0x34)
buf[0] (0x12) -- 高位
---------------
低地址

Little-Endian: 低地址存放低位,如下:

高地址
---------------
buf[3] (0x12) -- 高位
buf[2] (0x34)
buf[1] (0x56)
buf[0] (0x78) -- 低位
--------------

低地址

发表于 2018-04-03 16:56:39 回复(0)
通常,我们无法检查联合体的某一成员,除非已经用该成员给联合体赋值,或者该联合体包含有结构。联合体中的结构体内变量引用,x.z.n表示联合体x中结构体z内的变量n
发表于 2017-08-23 16:59:15 回复(0)

这就触及到我的知识盲区了,题目都没看懂," x; " 啥意思?

发表于 2019-11-19 19:06:24 回复(1)
对于堆来讲,生长方向是向上的,也就是向着内存地址增加的方向;对于栈来讲,它的生长方式是向下的,是向着内存地址减小的方向增长。
此处的联合体是在栈中的,联合体的特性:从低地址开始存放。数据是0X1234
                                大端(低地址放高字节)        小端(低地址放低字节)        联合中的结构体
地址先    01001            0X34                                        0X12                               后   n
地址后    01000            0X12                                        0X34                               先    m
所以n对应的大端是0X34,小端是0X12,选择A

发表于 2018-04-24 12:34:03 回复(0)
发表于 2023-11-13 14:25:47 回复(0)
0X1234不是一个地址,是一个数据,占32位,0x34和0x12各占一个16位,因为联合体共用地址,所以a的地址平分给m和n,按大端分34给m,按小端分12给m
编辑于 2023-03-23 16:14:14 回复(0)

堆栈的生长方向从最本质的理解是堆栈入栈方向是从高地址向地址还是低地址向高地址。

从高地址向低地址生长一般叫做向下生长,也叫作逆向生长。

从低地址向高地址生长一般叫做向上生长,也叫作正向生长。

一般来说堆栈是逆向生长的。本题是结构体 比较特殊,结构体中,先声明的是低地址(m),后声明的是高地址(n)。

大端和小端是指数据在内存中的存储模式,它由 CPU 决定:

1) 大端模式(Big-endian)是指将数据的低位(比如 1234 中的 34 就是低位)放在内存的高地址上,而数据的高位(比如 1234 中的 12 就是高位)放在内存的低地址上。这种存储模式有点儿类似于把数据当作字符串顺序处理,地址由小到大增加,而数据从高位往低位存放。

2) 小端模式(Little-endian)是指将数据的低位放在内存的低地址上,而数据的高位放在内存的高地址上。这种存储模式将地址的高低和数据的大小结合起来,高地址存放数值较大的部分,低地址存放数值较小的部分,这和我们的思维习惯是一致,比较容易理解。


综述所述           
0x1234                  0x12:高位                 0x34:低位
大端模式:        0x3412                 0x34:高位 (n)            0x12:低位(m)
小端模式:        0x1234                 0x12:高位 (n)            0x34:低位(m)

发表于 2022-11-16 12:41:16 回复(0)
1.
struct允许同时存储多个不同类型的数据,大小由所有成员组成
union许在相同的内存位置存储不同的数据类型,大小是其中最大成员的大小
2.
struct中,先定义的低地址,后定义的高地址
3.
a=0x1234,其中12是高字节,34是低字节
4.
大端即大字节序,高字节存储在低地址中,低字节存储在高地址中,符合我们从左到右的阅读顺序
小端即小字节序,高字节存储在高地址中,低字节存储在低地址中,逆序阅读顺序
5.故:
m是低地址,在大端中是0x12,在小端中是0x34
n是高地址,在大端中是0x34,在小端中是0x12

发表于 2023-12-09 14:54:04 回复(0)
x.z.n应该是高位地址,
大字节序是高位地址存放低位数据
小字节序是低位地址存放低位数据
大字节序的时候下x.z.n应该放低位数据也就是0x34
小字节序的时候相反,放0x12
发表于 2022-11-10 23:06:57 回复(0)
小端模式:高位字节存放在高地址,低位字节存放在低地址;
大端模式:高位字节存放在低地址,低位字节存放在高地址;
发表于 2022-03-21 15:51:28 回复(0)
结构体的内存先后如何分布没有定义,union中一个数赋值时其他状态是不可用的
发表于 2022-02-15 21:50:22 回复(0)
0X12代表着低位,0X34代表着高位。
结构体优先声明的是低地址,然后是高地址。
大端:低位放在高地址。
小端:高位放在高地址。
发表于 2021-12-11 09:34:28 回复(0)
union共享内存
发表于 2021-06-26 15:56:49 回复(0)