首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

打印位域出现的奇怪有关问题

2012-02-26 
打印位域出现的奇怪问题C/C++ code#include stdio.h#include string.hstruct abcd_st {unsigned int a

打印位域出现的奇怪问题

C/C++ code
#include <stdio.h>#include <string.h>struct abcd_st {    unsigned int a : 11;    unsigned int b : 2;    unsigned int c : 2;    unsigned int d : 1;};int main(int argc,char **argv) {    struct abcd_st abcd;    unsigned char *ptr = (unsigned char *)&abcd;    memset(&abcd,0xFF,1);    memset(((char *)&abcd) + 1,0xFB,1);    printf("abcd: %X %X\n",ptr[0],ptr[1]);    printf("a:%X,b:%X,c:%X,d:%X\n",        abcd.a,        abcd.b,        abcd.c,        abcd.d);    return 0;}

以上代码打印的结果是:
abcd: FF FB
a:3FF,b:3,c:3,d:1

但打印出来的c是错误的,应该为1才对,有谁能解释一下这种奇怪的现象吗?

[解决办法]
给个不同的值,希望lz能看出来:
abcd: FF 1B
a:3FF,b:3,c:0,d:0

对应的位与值列表
abcd: FF 1B 
11111111 11011000
aaaaaaaa aaabbccd

[解决办法]
出错估计是:a是从第一个字节开始访问, b,c,d都是从第二个字节的首地址开始访问.

[解决办法]
c不是错误的
FFFB,如果读这块内存的值时,其实是倒过来的FB FF
如图:
 1 11 11 011 11111111
|d| c| b| a|
[解决办法]
LZ是 大/小 字节序?


[解决办法]
结果没有错误
楼主要把 关于字节序(bigEndian & littleEndian)的知识看一下
[解决办法]
C/C++ code
struct abcd_st {    unsigned int a : 11;  //    unsigned int b : 2;   //    unsigned int c : 2;   //小弟不明白,谁能给解释一下, 为什么用冒号,表示什么意思    unsigned int d : 1;   //??};    memset(&abcd,0xFF,1);//这句怎么解释    memset(((char *)&abcd) + 1,0xFB,1); // 

热点排行