1

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

4

4 回答 4

3

您的建议是可能的,但实际上没有意义。以下是以位表示的值(仅显示相关位,左侧的所有内容均为零):

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

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

于 2012-06-08T04:36:42.063 回答
2

还有哪些案例?如果存在某种模式,则可以将其概括为整数级别,否则您实际上只是在查看字符串替换。

2in123实际上是2E1 (10100),并且in21234不会2E2 (11001000)与 相关2 (10),至少在按位形式上是这样。此外,需要将已删除号码右侧的“数字”添加到已删除号码左侧的数字 / 10。

即,从 123 到 13:

Located "2".
Number on left (x): 100
Number on right (y): 3
y + (x / 10) = 13

从 1324 到 134

Located "2"
Number on left (x): 1300
Number on right (y): 4
y + (x / 10) = 134

除非有某种模式(即您知道数字的位置),否则您只需要.ToString()输入数字,然后执行 a .Replace("2", ""),然后再对结果执行 an int.Parse()

编辑:有人赞成这个答案,我意识到我以前的实现是不必要的复杂。“迭代”以 10 为基数的数字相对简单,不需要递归。

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

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

于 2012-06-08T05:01:24.937 回答
0

由于我们正在使用以 10 为底的数字,因此以 2 为底的操作至少可以说是丑陋的。使用一些数学,从 k 中删除第 n 个数字,然后移动是

(k/pow(10,n))*pow(10, n-1) + k%pow(10, n-1)

在 base 2 中,<<and>>运算符的作用类似于乘以 a pow(2, n),并且&使用掩码完成 的工作%,但在 base 10 中,位不对齐。

于 2012-06-08T05:20:38.273 回答
0

这很尴尬,但如果你真的必须只进行按位运算,我建议你将数字转换为 BCD。进入 BCD 后,您基本上拥有一个 0 到 9 之间的十六进制数字,因此删除一个数字非常简单。完成后,转换回二进制。

我不相信有人愿意这样做。

于 2012-06-08T06:20:25.837 回答