例如,如何使用按位运算符2
从123
和返回中删除13
?我不知道该怎么做..有可能吗?提前致谢。
4 回答
您的建议是可能的,但实际上没有意义。以下是以位表示的值(仅显示相关位,左侧的所有内容均为零):
2: 000010 || 123: 1111011 || 13: 001101
没有逻辑方法可以通过按位运算将 123 更改为 13。最好将其转换为字符串或字符数组,删除两者然后将其转换回 int。
还有哪些案例?如果存在某种模式,则可以将其概括为整数级别,否则您实际上只是在查看字符串替换。
2
in123
实际上是2E1 (10100)
,并且in2
都1234
不会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
由于我们正在使用以 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 中,位不对齐。
这很尴尬,但如果你真的必须只进行按位运算,我建议你将数字转换为 BCD。进入 BCD 后,您基本上拥有一个 0 到 9 之间的十六进制数字,因此删除一个数字非常简单。完成后,转换回二进制。
我不相信有人愿意这样做。