📅  最后修改于: 2023-12-03 14:55:22.326000             🧑  作者: Mango
在编程中,有时需要将数组或二进制串中的1和0分别移到左右两侧。这时可以使用位掩码进行操作。下面介绍一种在c/c++中实现该操作的方法。
首先我们需要定义一个mask值,mask值需要包含n个1和m个0。下面给出mask的求法:
int mask = (1 << n) - 1;
mask = mask ^ ((1 << (n-m)) - 1);
假设要将一个二进制串中的1移到左边,则可以使用下面的代码:
unsigned int arr[N] = {0};
int n = 10;
int cnt = 0;
for(int i=0; i<n; i++) {
if(arr[i] == 1) {
arr[cnt++] = arr[i];
}
}
for(int i=cnt; i<n; i++) {
arr[i] = 0;
}
同样地,如果想将0移到右边,可以先将所有值进行翻转,再按照相同的方法处理1。
本文介绍了如何使用位掩码来实现将数组或二进制串中1和0移到左右两侧的操作。这种方法简单直接,适用于数量较少的情况。