C++ 如何使用逐位运算符提取整数中的数字

C++ 如何使用逐位运算符提取整数中的数字,c++,c,bit-shift,C++,C,Bit Shift,如何使用逐位运算符从整数中提取数字。i、 我想在整数n=123456中提取234,我知道可以使用and,or,xor逐位运算符,但我不确定如何提取?thnx如果您不希望此时按位,我相信您可以像这样提取单个数字: int digitAtPos(int number, int pos) { return ( number / (int)pow(10.0, pos-1) ) % 10; } 我不确定这是否是最快/最有效的方法,但它确实有效 将数字缝合在一起也应该很容易,只要乘以十的幂就可以了

如何使用逐位运算符从整数中提取数字。i、 我想在整数n=123456中提取234,我知道可以使用and,or,xor逐位运算符,但我不确定如何提取?thnx

如果您不希望此时按位,我相信您可以像这样提取单个数字:

int digitAtPos(int number, int pos)
{
   return ( number / (int)pow(10.0, pos-1) ) % 10;
}
我不确定这是否是最快/最有效的方法,但它确实有效

将数字缝合在一起也应该很容易,只要乘以十的幂就可以了


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

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

int pos;
cout<<"ENter position";
cin>>pos; 
int temp = pos;
while(temp!=0)
{
//right shift the number
temp--;
}
int-pos;
coutpos;
内部温度=位置;
while(温度!=0)
{
//右移号码
温度--;
}

看看这个可能会有所帮助:

您可以使用。您将需要实现执行长除法所需的原语

具体操作方式取决于允许使用的精确操作集。例如,如果不允许添加,则必须构建自己的添加操作。如果不允许进行减法运算,则需要使用XOR、increment和add构建减法运算


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

因为这被标记为家庭作业,所以我只解释基本概念,实际上我不会给出答案

您可以使用逐位运算来提取基数为2的数字的各个位。因此,如果您的数字是10110101,并且您希望在最后得到0101,那么您必须设置一个掩码,然后进行二进制和运算以过滤掉不重要的数字。你的面具应该看起来像00001111。当你和他们在一起时,只剩下你想要的数字


10110101&00001111==00000101

不在10进制中…@Mysticial:我会说这只在b10进制中可能。我还以为我是极客……为什么要人为地限制位运算符?这是家庭作业吗?位移位运算符被认为可以吗?一般来说,我不认为应该重新实现现有函数,除了两个原因:其中有错误(但是你应该做一个错误报告),或者你确实确定你可以更快地实现它/更健壮/更可伸缩,因为例如你检查了实现。很好,现在,您所要做的就是用位操作替换上面的所有操作。对于
pow()
函数,您将如何执行该操作?我想你可以做重复乘法,但那会花更长的时间吗?那么如何使用基数10按位工作呢?这就像说你可以用锤子压扁一只蚂蚁,用锤子制造一台压扁蚂蚁的机器。如果允许除以10和模式10,则问题很难解决。使用
pow
和浮点数学是愚蠢的。