首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过逐位运算获取整数的第N位?

如何通过逐位运算获取整数的第N位?
EN

Stack Overflow用户
提问于 2008-10-15 06:19:29
回答 12查看 51.6K关注 0票数 35

举例说明。123456,我们要去掉右数第三个('4')。

练习中的想法是分别访问每个数字(即。6 5 4 3 2 1)。

C/C++/C#优先。

EN

回答 12

Stack Overflow用户

发布于 2008-10-15 06:32:28

更有效的实现可能是这样的:

代码语言:javascript
复制
char nthdigit(int x, int n)
{
    while (n--) {
        x /= 10;
    }
    return (x % 10) + '0';
}

如果您只需要其中一个数字,则可以省去将所有数字转换为字符串格式的工作。而且,您不必为转换后的字符串分配空间。

如果需要考虑速度,您可以预先计算一个10次方的数组,并使用n来索引此数组:

代码语言:javascript
复制
char nthdigit(int x, int n)
{
    static int powersof10[] = {1, 10, 100, 1000, ...};
    return ((x / powersof10[n]) % 10) + '0';
}

正如其他人所提到的,这是最接近基数10的逐位运算的方法。

票数 40
EN

Stack Overflow用户

发布于 2013-04-19 07:39:42

我只是根据这里的答案写了这篇文章,所以我想和大家分享一下。

这是基于Brannon的答案,但允许您一次获得一个以上的数字。在我的例子中,我使用它从保存在整数中的日期和时间中提取部分,其中的数字是yyyymmddhhnnssm_s格式。

代码语言:javascript
复制
public static int GetDigits(this int number, int highestDigit, int numDigits)
{
    return (number / (int)Math.Pow(10, highestDigit - numDigits)) % (int)Math.Pow(10, numDigits);
}

我把它做成了一个扩展,你可能不想这样做,但下面是示例用法:

代码语言:javascript
复制
int i = 20010607;
string year = i.GetDigits(8,4).ToString();
string month = i.GetDigits(4,2).ToString();
string day = i.GetDigits(2,2).ToString();

结果:

年份= 2001

月份=6

天=7

票数 6
EN

Stack Overflow用户

发布于 2008-10-15 06:37:14

使用基数为10的数学:

代码语言:javascript
复制
class Program
{
    static void Main(string[] args)
    {
        int x = 123456;

        for (int i = 1; i <= 6; i++)
        {
            Console.WriteLine(GetDigit(x, i));
        }
    }

    static int GetDigit(int number, int digit)
    {
        return (number / (int)Math.Pow(10, digit - 1)) % 10;
    }
}

产生:

代码语言:javascript
复制
6
5
4
3
2
1
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/203854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档