如何从2
中删除123
,并使用按位运算符返回13
?我不知道怎么做...这可能吗?提前谢谢。
答案 0 :(得分:3)
你所建议的是可能的,但这样做并没有多大意义。以下是以位为单位的值表示(仅显示相关位,剩下的所有内容均为零):
2:000010 || 123:1111011 || 13:001101
使用按位运算将123更改为13是没有逻辑方法的。最好把它变成一个字符串或字符数组,删除它们然后再把它转换成一个int。
答案 1 :(得分:1)
还有哪些其他案例?如果存在某种模式,则可以将其概括为整数级别,否则您实际上只是在查看字符串替换。
2
中的123
实际上是2E1 (10100)
,而2
中的1234
将是2E2 (11001000)
,2 (10)
与Located "2".
Number on left (x): 100
Number on right (y): 3
y + (x / 10) = 13
无关{1}},至少以按位形式。此外,删除号码右侧的“号码”需要添加到已删除号码/ 10左侧的号码中。
即从123到13:
Located "2"
Number on left (x): 1300
Number on right (y): 4
y + (x / 10) = 134
从1324到134
.ToString()
除非有某种模式(即你知道数字的位置),否则你需要.Replace("2", "")
数字,然后执行int.Parse()
,然后才能执行 static int remove_digit(int number, int digit)
{
int sum = 0;
if (number > 0) //can't remove 0, doesn't matter if the "digit" is 0 also.
{
int factor = 1;
int temp = number;
while (temp > 0 && temp % 10 != digit)
{
sum += (temp % 10) * factor;
factor *= 10;
temp /= 10;
}
sum += remove_digit(temp / 10, digit) * factor;//recursion to remove any further digits.
}
return sum;
}
结果。
你可能会定义某种递归函数来纯粹以整数形式执行此操作,但是对于.ToString()和int.Parse()
的小开销来说,这是很多工作。编辑:因为我很无聊,我写了一个递归的“整数”版本。
Console.WriteLine(remove_digit(125254443, 2));
并没有花太多时间来优化代码,因此可能存在一些冗余。随意修改它。
1554443
结果: {{1}}
编辑:修改代码,现在稍快一些。
答案 2 :(得分:0)
由于我们使用的是基数为10的数字,因此基数2中的操作至少可以说是丑陋的。使用一些数学运算,从k中删除第n个数字,然后移位
(k/pow(10,n))*pow(10, n-1) + k%pow(10, n-1)
在基数2中,<<
和>>
运算符的行为与pow(2, n)
相乘,带&
的{{1}}执行%
的工作,但是在基数10中,这些位不排成一行。
答案 3 :(得分:0)
这很尴尬,但如果你真的必须只进行按位操作,我建议你convert the number to BCD。一旦进入BCD,你基本上有一个十六进制数字,数字在0到9之间,所以删除一个数字非常简单。完成后,转换回二进制文件。
我不相信任何人会想那样做。