码迷,mamicode.com
首页 > 其他好文 > 详细

位域及大小端一题

时间:2015-03-10 22:52:01      阅读:320      评论:0      收藏:0      [点我收藏+]

标签:

In little-endian systems, what is the result of following C program ?

 

#include <stdio.h>

typedef struct bitstruct {
  int b1:5;
  int :2;
  int b2:2;
  
} bitstruct;

int main()
{
  bitstruct b;
  memcpy(&b, "EMC EXAMINATION", sizeof(b));
  printf("%d, %d\n", b.b1, b.b2);
  
  return 0;
}

 

结果:

5, -2

析:
1)x86系列的CPU都是小端的。
2)根据位域的定义知 b 占内存空间的9个bit
3)‘E‘的ASCII值为 0x45其二进制为 0100 0101,‘M‘的ASCII值为 0x4D 其二进制为0100 1011
4)在小端系统中根据高高低低原则(高位字节存放在高地址处,低位字节存放在低地址处),b 中位域b1 存放在内存低地址处,

b2存放在内存的高地址处。
5)内存分布
一个字节的低bit 放在内存的低bit地址处,假设在32位系统中:

  0x00001000  bit0  1
  0x00001000  bit1  0
  0x00001000  bit2  1
  0x00001000  bit3  0
  0x00001000  bit4  0
  0x00001000  bit5  0
  0x00001000  bit6  1
  0x00001000  bit7  0
  0x00001001  bit8  1

 

b1 使用 bit0 ~ bit4
bit5 ~ bit6 空出
b2 使用 bit7 bit8

这样
b1 的二进制值为: bit4 bit3 bit2 bit1 bit 0 -> 00101 -> 5
b2 的二进制值为: bit8 bit7 -> 10 -> 有符号数转补码表示 10 -> -2

位域及大小端一题

标签:

原文地址:http://www.cnblogs.com/aqing1987/p/4328413.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!