#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
<<
b
&
(
1
<<
e)
-
(
1
<<
b);
return
n
&=
num
<<
b
|
~
( (
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
>>
b
&
(
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
踏雪赤兔 阅读(410)
评论(1) 编辑 收藏 引用 所属分类:
零件仓库