位段

位段是一个有意思的语法;

//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;
}


可以用作计算器的使用;

不允许对位段取地址;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值