LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 711|回复: 1

打印位域出现的奇怪问题

[复制链接]
发表于 2008-7-2 17:42:31 | 显示全部楼层 |阅读模式
  1. #include <stdio.h>
  2. #include <string.h>
  3. struct abcd_st {
  4.         unsigned int a : 11;
  5.         unsigned int b : 2;
  6.         unsigned int c : 2;
  7.         unsigned int d : 1;
  8. };
  9. int main(int argc,char **argv) {
  10.         struct abcd_st abcd;
  11.         unsigned char *ptr = (unsigned char *)&abcd;
  12.         memset(&abcd,0xFF,1);
  13.         memset(((char *)&abcd) + 1,0xFB,1);
  14.         printf("abcd: %X %X\n",ptr[0],ptr[1]);
  15.         printf("a:%X,b:%X,c:%X,d:%X\n",
  16.                 abcd.a,
  17.                 abcd.b,
  18.                 abcd.c,
  19.                 abcd.d);
  20.         return 0;
  21. }
复制代码
以上代码打印的结果是:
abcd: FF FB
a:3FF,b:3,c:3,d:1

但打印出来的c是错误的,应该为1才对,有谁能解释一下这种奇怪的现象吗?
我是linux gcc version 4.1.2
发表于 2008-7-2 22:10:24 | 显示全部楼层
注意大小头,像你这样的定义需要加#ifdef WORDS_BIGENDIAN
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表