Stl 如何将数字转换为二进制位,然后截断或放大它们的大小,然后插入位容器?

Stl 如何将数字转换为二进制位,然后截断或放大它们的大小,然后插入位容器?,stl,binary,numbers,bit,truncation,Stl,Binary,Numbers,Bit,Truncation,正如问题的标题所说,我想取一个数字(最好声明为int或char或std::uint8\u t),将其转换为二进制表示,然后用给定的某个可变位数对其进行截断或填充,然后将其插入位容器中(最好是std::vector,因为我需要根据可变的位数调整可变的位容器大小)例如,我有inta=2,b=3。假设我必须将其分别作为三位和六位写入容器中。因此,我必须将010和000011放入位容器中。那么,如何使用普通STL met从2到010或3到000011hods?我尝试了我想到的所有可能的事情,但什么都没有

正如问题的标题所说,我想取一个数字(最好声明为
int
char
std::uint8\u t
),将其转换为二进制表示,然后用给定的某个可变位数对其进行截断或填充,然后将其插入位容器中(最好是
std::vector
,因为我需要根据可变的位数调整可变的位容器大小)例如,我有
inta=2,b=3
。假设我必须将其分别作为三位和六位写入容器中。因此,我必须将
010
000011
放入位容器中。那么,如何使用普通STL met从
2
010
3
000011
hods?我尝试了我想到的所有可能的事情,但什么都没有得到。请帮助。谢谢。

您可以使用“移位”(
>
)和“按位与”(
&
)的组合

首先让我们看一下按位的
&
:例如,如果你有一个
int a=7
,你用13对它执行
&
-操作,你会得到5。为什么? 因为当两个操作数在位置i处都有1时,&在位置i处给出1。所以我们得到:

  00...000111  // binary 7
& 00...001101  // binary 13
-------------
  00...000101  // binary 5
接下来,通过使用移位操作
>
可以移位
int
的二进制表示形式。例如
5>>1
是2。为什么? 因为每个位置向右移位1。最右边的位“掉出来”。因此我们有:

00...00101 //binary for 5
shift by 1 to the right gives:
00...00010 // binary for 2
另一个例子:13(01101)被2移位为3(00011)。我希望你能理解

因此,通过反复移位并使用1(00..0001)执行
&
,可以读取数字的二进制表示形式

最后,您可以使用此1设置
向量中的相应位置。假设您想要在帖子中显示表示,则必须从后面填充向量。例如,您可以按照以下方式进行操作:

unsigned int f=13; //the number we want to convert
std::vector<bool> binRepr(size, false); //size is the container-size you want to use.
for(int currBit=0; currBit<size; currBit++){
 binRepr[size-1-currBit] = (f >> currBit) & 1;
}
unsigned int f=13;//要转换的数字
std::vector binRepr(size,false);//size是要使用的容器大小。
对于(int currBit=0;currBit>currBit)&1;
}
如果容器小于int的二进制表示形式,则容器将包含截断的数字。如果容器较大,则将用0填充

我使用的是
unsigned int
,因为对于
int
,您仍然需要处理负数(对于正数,它应该是一样的),我们必须深入研究二者的补码表示,这并不难,但需要更多的处理