位段是一个有意思的语法;
//author: 望月
//date: 2014/10/16
#include <stdio.h>
#include <string.h>
struct bits
{
unsigned char _0x1:1;
unsigned char _0x2:1;
unsigned char _0x4:1;
unsigned char _0x8:1;
unsigned char _0x10:1;
unsigned char _0x20:1;
unsigned char _0x40:1;
unsigned char _0x80:1;
unsigned char _0x100:1;
unsigned char _0x200:1;
unsigned char _0x400:1;
unsigned char _0x800:1;
unsigned char _0x1000:1;
unsigned char _0x2000:1;
unsigned char _0x4000:1;
unsigned char _0x8000:1;
unsigned char _0x10000:1;
unsigned char _0x20000:1;
unsigned char _0x40000:1;
unsigned char _0x80000:1;
unsigned char _0x100000:1;
unsigned char _0x200000:1;
unsigned char _0x400000:1;
unsigned char _0x800000:1;
unsigned char _0x1000000:1;
unsigned char _0x2000000:1;
unsigned char _0x4000000:1;
unsigned char _0x8000000:1;
unsigned char _0x10000000:1;
unsigned char _0x20000000:1;
unsigned char _0x40000000:1;
unsigned char _0x80000000:1;
unsigned char _0x100000000:1;
unsigned char _0x200000000:1;
unsigned char _0x400000000:1;
unsigned char _0x800000000:1;
unsigned char _0x1000000000:1;
unsigned char _0x2000000000:1;
unsigned char _0x4000000000:1;
unsigned char _0x8000000000:1;
unsigned char _0x10000000000:1;
unsigned char _0x20000000000:1;
unsigned char _0x40000000000:1;
unsigned char _0x80000000000:1;
unsigned char _0x100000000000:1;
unsigned char _0x200000000000:1;
unsigned char _0x400000000000:1;
unsigned char _0x800000000000:1;
unsigned char _0x1000000000000:1;
unsigned char _0x2000000000000:1;
unsigned char _0x4000000000000:1;
unsigned char _0x8000000000000:1;
unsigned char _0x10000000000000:1;
unsigned char _0x20000000000000:1;
unsigned char _0x40000000000000:1;
unsigned char _0x80000000000000:1;
unsigned char _0x100000000000000:1;
unsigned char _0x200000000000000:1;
unsigned char _0x400000000000000:1;
unsigned char _0x800000000000000:1;
unsigned char _0x1000000000000000:1;
unsigned char _0x2000000000000000:1;
unsigned char _0x4000000000000000:1;
unsigned char _0x8000000000000000:1;
};
int main( int argc, char** argv)
{
struct bits p;
memset( &p, 0, sizeof(struct bits));
p._0x8000000000000000 = 1;
printf("sizeof:%d\n", sizeof( struct bits));
printf(
"%u%u%u%u %u%u%u%u %u%u%u%u %u%u%u%u "
"%u%u%u%u %u%u%u%u %u%u%u%u %u%u%u%u "
"%u%u%u%u %u%u%u%u %u%u%u%u %u%u%u%u "
"%u%u%u%u %u%u%u%u %u%u%u%u %u%u%u%u\n",
p._0x8000000000000000, p._0x4000000000000000,
p._0x2000000000000000, p._0x1000000000000000,
p._0x800000000000000 , p._0x400000000000000 ,
p._0x200000000000000 , p._0x100000000000000 ,
p._0x80000000000000 , p._0x40000000000000 ,
p._0x20000000000000 , p._0x10000000000000 ,
p._0x8000000000000 , p._0x4000000000000 ,
p._0x2000000000000 , p._0x1000000000000 ,
p._0x800000000000 , p._0x400000000000 ,
p._0x200000000000 , p._0x100000000000 ,
p._0x80000000000 , p._0x40000000000 ,
p._0x20000000000 , p._0x10000000000 ,
p._0x8000000000 , p._0x4000000000 ,
p._0x2000000000 , p._0x1000000000 ,
p._0x800000000 , p._0x400000000 ,
p._0x200000000 , p._0x100000000 ,
p._0x80000000 , p._0x40000000 ,
p._0x20000000 , p._0x10000000 ,
p._0x8000000 , p._0x4000000 ,
p._0x2000000 , p._0x1000000 ,
p._0x800000 , p._0x400000 ,
p._0x200000 , p._0x100000 ,
p._0x80000 , p._0x40000 ,
p._0x20000 , p._0x10000 ,
p._0x8000 , p._0x4000 ,
p._0x2000 , p._0x1000 ,
p._0x800 , p._0x400 ,
p._0x200 , p._0x100 ,
p._0x80 , p._0x40 ,
p._0x20 , p._0x10 ,
p._0x8 , p._0x4 ,
p._0x2 , p._0x1
);
printf("%llu\n", p);
return 0;
}
可以用作计算器的使用;
不允许对位段取地址;