首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用按位运算符将一个数字从另一个数字中移除?

如何使用按位运算符将一个数字从另一个数字中移除?
EN

Stack Overflow用户
提问于 2012-06-08 12:31:48
回答 4查看 672关注 0票数 1

例如,我如何使用位运算符从123中删除2并返回13?我不知道该怎么做..有可能吗?提前谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-08 12:36:42

你所建议的是可能的,但这样做是没有意义的。下面是以位为单位的值表示(仅显示相关位,左边的所有值都是零):

2: 000010 || 123: 1111011 || 13: 001101

没有逻辑的方法可以通过位运算将123转换为13。最好将其转换为字符串或字符数组,删除这两个数组,然后将其转换回int。

票数 3
EN

Stack Overflow用户

发布于 2012-06-08 13:01:25

还有其他的情况吗?如果存在某种类型的模式,则可以将其推广到整数级别,否则,您实际上只是在寻找字符串替换。

123中的2实际上是2E1 (10100),而1234中的2将是2E2 (11001000),这两者都与2 (10)无关,至少在位形式上是这样。此外,需要将已删除号码右侧的“数字”添加到已删除号码/ 10左侧的数字。

也就是说,从123到13:

代码语言:javascript
复制
Located "2".
Number on left (x): 100
Number on right (y): 3
y + (x / 10) = 13

从1324到134

代码语言:javascript
复制
Located "2"
Number on left (x): 1300
Number on right (y): 4
y + (x / 10) = 134

除非有某种模式(即你知道数字的位置),否则在对结果进行.ToString()之前,你只需要先对数字进行int.Parse(),然后进行.Replace("2", "")

编辑:有人对这个答案投了赞成票,我意识到我之前的实现不必要地复杂。在一个以10为基数的数中“迭代”数字相对简单,不应该需要递归。

下面是新的解决方案,性能更好,但这是一个巨大的微优化:

代码语言:javascript
复制
static int OmitDigit(int number, int digit) {
    var output = 0;
    var multiplier = 1;
    
    while (number > 0) {
        var n = number % 10;
        number /= 10;
        
        if (n != digit) {
            output += (n * multiplier);
            multiplier *= 10;
        }
    }
    
    return output;
}

结果:1554443

票数 2
EN

Stack Overflow用户

发布于 2012-06-08 13:20:38

因为我们使用的是以10为基数的数字,所以至少可以说,以2为基数的操作是丑陋的。使用一些数学方法,从k中删除第n位数字,并将其移位为

代码语言:javascript
复制
(k/pow(10,n))*pow(10, n-1) + k%pow(10, n-1)

在基数2中,<<>>运算符的作用类似于乘以pow(2, n),而带有掩码的&执行%的工作,但在基数10中,位不对齐。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10943087

复制
相关文章

相似问题

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