首页 > 试题广场 >

参考以下代码,在大端字节机器中x.c的值为union A

[单选题]
参考以下代码,在大端字节机器中x.c的值为
union A {
    short c;
    char buf[4];
} x = {0x01, 0x02, 0x03, 0x04}


  • 0x102
  • 0x201
  • 0x304
  • 0x403
所谓大端就是指高位值在内存中放低位地址,所谓小端是指低位值在内存中放低位地址。
比如0x11223344在大端机上是11223344,在小端机上是44332211。
发表于 2018-09-12 10:34:21 回复(1)
测试了一下,这个程序的初始化有点问题,其实x中实际存储的值是01,后面的三个值都被丢弃掉了。如果按照题目的本意x中的存储内容从低地址到高地址为01020304,如果将这个联合体解释为short类型,由于short类型占两个字节的存储空间,那么联合体的最低两个字节有效,也就是0102。又因为是大端存储,低地址占据最高有效位,所以实际的十六进制值为:0102。
我们在书写的时候,对于地址,一般是低地址在左,高地址在右;而对于各种进制的数值,确是最高有效位在左,最低有效位在右,这是在理解大小端问题时我们需要注意的地方。
发表于 2019-01-10 08:36:09 回复(0)
char buf[4];是一个字节数组,也就是每个元素只占一个字节,字节元素不存在大小端问题,所以答案A才符合。
发表于 2018-09-18 00:47:10 回复(0)
大端字节:高位值放在内存中的低位地址 ; 小端字节:低位值放在内存中的低位地址。
union联合,结构中的数据共享空间。
题目中字符数组在内存中的存放:                        c在内存中的存放(和buf共享空间):
A:       0x01     ----->低位地址                                 0x01
A+1:0x02                                                             0x02 
A+2:   0x03                                                             由于是大端字节,所以 A+1存放的是低位值,A存放的是高位值,所以c位0x0102,即选A。
A+3:   0x04     ------>高位地址
发表于 2018-09-18 09:09:14 回复(0)
在大端字节机器中,多字节数据的高字节保存在低地址,低字节保存在高地址。在这个例子中,union A中的成员变量c和buf共享同一块内存空间。
short 占两个字节,联合体占4个字节共享空间
按照大端字节序,内存布局如下:

地址    | 内容
--------|--------
0x1000  | 0x01
0x1001  | 0x02
0x1002  | 0x03
0x1003  | 0x04

因此,x.c的值为0x0102。
发表于 2023-09-26 09:44:58 回复(0)
最高位的0是不是省略了没写出来啊
发表于 2018-09-07 14:00:25 回复(3)
大端存储是0x102 小段存储是0x201 吗?
发表于 2024-01-23 11:38:30 回复(0)
大伙注意, 如果是小端字节序,不是0x0304,而是0x0201
发表于 2023-06-13 11:43:34 回复(1)
弱弱的问,编译报错? (error C2078: 初始值设定项太多)
发表于 2018-10-25 15:02:05 回复(0)
应该是0x0102吧,感觉0省略了
发表于 2018-10-02 11:03:31 回复(0)