posts - 274,  comments - 1258,  trackbacks - 0

 

#include < cstdio >
class  Bits {
    
int  n; // 底层容器,可选int或long long
public :
    
void  clear() { n = 0 ;}
    
int   set ( int  b,  int  e,  int  num) { // 将num的[0,e-b)位复制到n的[b,e)位
        n |= num << &  ( 1 << e) - ( 1 << b);
        
return  n &= num << |   ~ ( ( 1 << e) - ( 1 << b) );
    }

    
int   set ( int  b,  int  e,  bool  bit) { // 填充位
         if (bit)
            
return  n |= ( 1 << e) - ( 1 << b); 
        
else
            
return  n &=~ ( ( 1 << e) - ( 1 << b) );
    }

    
int   get ( int  b,  int  e) { // 获取[b,e)位
         return  n >> &  ( 1 << (e - b)) - 1 ;
    }

    
int  not( int  b,  int  e) { // 将[b,e)位取反
         return  n ^= ( 1 << e) - ( 1 << b);
    }

    friend 
int  concat(Bits bs1,  int  b1, int  e1, Bits bs2,  int  b2,  int  e2) {
        
// 将bs1的[b1,e1)位与bs2的[b2,e2)位连接
        
// 依赖get()
         return  bs1. get (b1,e1) << (e2 - b2)  |  bs2. get (b2,e2);
    }

    
void  show() {
        
int  i;
        
/* for(i=0; i<8*sizeof(n); ++i)
            printf("%d",i%10);
        putchar('\n');/*
*/

        
for (i = 0 ; i < 8 * sizeof (n);  ++ i)
            printf(
" %d " ,(n & 1 << i) != 0 );
        
// putchar('\n');
    }

}
;

posted on 2006-07-18 17:49 踏雪赤兔 阅读(390) 评论(1)  编辑 收藏 引用 所属分类: 零件仓库

FeedBack:
# re: 标程:位容器
2006-07-19 13:01 |
回踩啦,呵呵,我也没有说自己空虚,觉得过得很实在啊  回复  更多评论
  
只有注册用户登录后才能发表评论。

百度空间| 见闻日记| 编程感悟
我的twitter


LOGO

自我介绍:百度厂基础平台车间的一名挨踢民工。擅长C++、算法、语言设计、分布式计算,也用过Java,Python, PHP,JS/AS等语言开发。请关注我的twitter (免翻墙版) 发QQ消息


添加到收藏夹 Locations of visitors to this page

常用链接

随笔分类(300)

随笔档案(274)

文章分类(38)

相册

收藏夹(54)

与博主互动

博客手拉手

搜索

  •  

积分与排名

  • 积分 - 392997
  • 排名 - 10

最新评论

阅读排行榜

评论排行榜