+ -
当前位置:首页 → 问答吧 → C 语言中位域相关问题

C 语言中位域相关问题

时间:2010-07-20

来源:互联网

这两天在研究 C 语言中的位域,基本知识也明白了. 自己写了一些 C 语言测试程序.

下面这个程序的运行结果自己不明白,请大家帮忙解释一下。

相关说明:
-----------
下面的程序在我机子上面的运行结果:

size_of = 1
a = 6
b = 4294967294

如果使用已经注释掉的 structure,则运行结果如下:

size_of = 1
a = 6
b = 6

不明白什么原因,请大家给指点一下.

#include <stdio.h>
#include <string.h>

typedef struct bit_filed
{
    char a : 4 ;
    char b : 3 ;
    char   : 1 ;

} bit_field_t ;

/*
typedef struct bit_filed
{
    char a : 4 ;
    char b : 4 ;
    char   : 1 ;

} bit_field_t ;
*/

char value = 0x66 ;     /* 0 1 1 0 0 1 1 0 */

int main()
{
    bit_field_t bf ;

    printf( "size_of = %d\n", sizeof(bit_field_t) ) ;   
   
    memcpy( &bf, &value, sizeof(char) ) ;

    printf("a = %u\n", bf.a) ;
    printf("b = %u\n", bf.b) ;

    return 0 ;
}

作者: qiangqiang02   发布时间: 2010-07-20

bf.b = 110 b
压栈后,符号扩展成 0xFFFFFFFE;
所以%u打出来是4294967294
bf.a = 0110b
压栈后,符号扩展成0x00000006.
所以%u打出来是原值。
OVER!

作者: star1983653   发布时间: 2010-07-20

结构里面char 改成 unsigned char就可以了

作者: hellioncu   发布时间: 2010-07-20