Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用位运算符从另一个数字中删除一个数字?_C#_C_Bit Manipulation - Fatal编程技术网

C# 如何使用位运算符从另一个数字中删除一个数字?

C# 如何使用位运算符从另一个数字中删除一个数字?,c#,c,bit-manipulation,C#,C,Bit Manipulation,如何使用位运算符从123中删除示例2并返回13?我不知道怎么做。。有可能吗?提前感谢。您的建议是可能的,但实际上没有意义。以下是以位表示的值,仅显示相关位,再左的所有值均为零: 2:000010 | | 123:1111011 | | 13:001101 没有任何逻辑方法可以通过按位操作将123更改为13。最好将其转换为字符串或字符数组,删除这两个字符,然后将其转换回int。您的建议是可能的,但实际上没有意义。以下是以位表示的值,仅显示相关位,再左的所有值均为零: 2:000010 | | 12

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

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

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


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

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

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


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

还有什么其他情况?如果存在某种模式,则可以在整数级别对其进行推广,否则您实际上只是在寻找字符串替换

123中的2实际上是2E1 10100,1234中的2将是2E2 11001000,这两者都与210无关,至少以位形式。此外,删除号码右侧的号码需要添加到删除号码左侧的号码/10

i、 e,从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
除非存在某种模式,即您知道数字的位置,否则您只需在对结果进行int.Parse之前,先对数字进行.ToString,然后执行.Replace2

编辑:有人对这个答案投了赞成票,我意识到我以前的实现过于复杂。对以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

还有哪些病例?如果存在某种模式,则可以在整数级别对其进行推广,否则您实际上只是在寻找字符串替换

123中的2实际上是2E1 10100,1234中的2将是2E2 11001000,这两者都与210无关,至少以位形式。此外,删除号码右侧的号码需要添加到删除号码左侧的号码/10

i、 e,从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
除非存在某种模式,即您知道数字的位置,否则您只需在对结果进行int.Parse之前,先对数字进行.ToString,然后执行.Replace2

编辑:有人对这个答案投了赞成票,我意识到我以前的实现过于复杂。对以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)

在基数2中,运算符的作用类似于乘以一个pow2,n,&和一个掩码做%的运算,但在基数10中,位不对齐。

因为我们使用的是基数10的数字,所以基数2中的操作至少可以说是丑陋的。使用一些数学方法,从k中删除第n个数字,然后进行转换

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

在基数2中,运算符的作用类似于乘以pow2,n,和&加上掩码,运算量为%,但在基数10中,位不对齐。

这很尴尬,但如果确实这样做,则必须只进行位运算,我建议您。在BCD中,基本上有一个十六进制数字,数字介于0和9之间,因此删除一个数字非常简单。完成后,将其转换回二进制


我不相信任何人会想这样做。

这很尴尬,但如果你真的想这样做,我建议你只进行按位运算。在BCD中,基本上有一个十六进制数字,数字介于0和9之间,因此删除一个数字非常简单。完成后,将其转换回二进制


我不相信有人会想那样做。

你是想得到13、103或121?@haylem:13。更新的问题。这是家庭作业吗?或者你为什么要这样做?你的数字是以8、16还是4为基数?那么这很容易;你是想得到13、103还是121?@haylem:13。更新的问题。这是家庭作业吗?或者你为什么要这样做?你的数字是以8、16还是4为基数?那么这很容易;当然有。如果我们不局限于使用常数2和123:-谢谢。我会将其转换为字符串并返回int。我只是在寻找一种可能的微优化@你是说“如果”
我们是?在运行时生成掩码比使用字符串/字符数组要困难得多。我无法想象你会怎么做…当然有。如果我们不局限于使用常数2和123:-谢谢。我会将其转换为字符串并返回int。我只是在寻找一种可能的微优化@你是说“如果我们是”吗?在运行时生成掩码比使用字符串/字符数组要困难得多。我无法想象你会怎么做…做了一些测试,即使没有优化,它的性能也比int.parse100000001.ToString.Replace0好,虽然做了一些测试,但没有很多,即使没有优化,它的性能也比int.parse100000001.ToString.Replace0好,虽然hahaI对它进行了测试,但效果并不理想。我试着将k=123和n设为2,排在第二位,得到了15.3。这里是否缺少任何其他操作,或者我使用的k是错误的?我认为k/pow10,n需要加地板才能工作。我测试了它,但它似乎不起作用。我试着将k=123和n设置为2作为第二位,得到了15.3。这里是否缺少任何其他操作,或者我是否使用了k错误?我认为k/pow10,n需要加上地板才能工作。