如何使用按位运算符提取整数位数

时间:2012-02-23 04:42:20

标签: c++ c bit-shift

如何使用按位运算符从整数中提取数字。即我想在整数n = 123456中提取234我知道这是可能的使用和,或者,xor位运算符,但我不确定如何?日Thnx

4 个答案:

答案 0 :(得分:5)

如果您此时不想按位,我相信您可以提取这样的个别数字:

int digitAtPos(int number, int pos)
{
   return ( number / (int)pow(10.0, pos-1) ) % 10;
}

我不确定这是否是最快/最有效的方式,但它确实有效。

将数字拼接在一起应该也很容易,只需增加10的幂即可。

如果有人有更好的解决方案,请告诉我们。

答案 1 :(得分:1)

您可以使用long division逐个提取数字。您将需要实现长期划分所需的原语。

具体如何操作取决于您允许使用的精确操作集。例如,如果您不允许添加,则必须构建自己的添加操作。如果不允许减去,则需要使用XOR,增量和加法构建减法。

一旦你有了一个除法原语,就很容易了。 1010b的连续除法将提取数字。

答案 2 :(得分:1)

由于这被标记为家庭作业,我只是要解释基本概念,我实际上不会产生答案。

使用按位运算来提取基数为2的各个位。因此,如果您的数字是10110101,并且您想要在结尾处获得0101,则必须设置掩码,然后执行二进制并且过滤掉不重要的数字。你的面具看起来应该像00001111.当你和他们在一起时,只剩下你想要的数字。

10110101& 00001111 == 00000101

答案 3 :(得分:0)

将int转换为二进制。将数字移动到最左边或最右边的位置。按位AND与数字全部为零,根据我们执行的移位,在最左边或最右边只有一个1。将二进制文件重新转换为十进制。

int pos;
cout<<"ENter position";
cin>>pos; 
int temp = pos;
while(temp!=0)
{
//right shift the number
temp--;
}

也许看看这可能会有所帮助:Extracting bits with bitwise operators