C# 如何删除整数中的第 n 位?

标签 c# bit-manipulation

我正在尝试找到一种从整数中删除一位的方法。该解决方案不得使用字符串操作。 例如,我有数字 27,二进制表示为 11011。 我想删除第三位,这样我就剩下 1011。 或者我们有 182 (10110110),删除第 6 位,结果是 1110110(即 118)。我正在尝试考虑算法如何做到这一点,但到目前为止运气不佳,而且我无法在互联网上找到有用的信息。

我知道如何使用按位运算符以及如何提取或操作整数中的位(更改值、交换值等),但我不知道如何“删除”某个位。

我不是在寻找代码,只是在寻找操作逻辑。如果有人能帮助我,那就太棒了!

问候, 托尼

最佳答案

没问题,只需将数字分解为“上半部分”和“下半部分”,然后将它们放在一起,而无需现在消失的中间位。

未测试:

uint upper = x & 0xFFFFFFF0;
uint lower = x & 7;
return (upper >> 1) | lower;

更一般:(也未测试)

uint upper = x & (0xFFFFFFFE << n);
uint lower = x & ((1u << n) - 1);
return (upper >> 1) | lower;

关于C# 如何删除整数中的第 n 位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28771294/

相关文章:

c# - 从一个程序集中在另一个程序集中但在同一项目中获取类的实例

c# - 将 Latin 1 编码的 UTF8 转换为 Unicode

c - 找到二进制基础的最快方法

c++ - 设置最高有效位

javascript - JavaScript 中处理位压缩的最有效方法

c# - 使用流列表时出现内存问题

c# - 如何将 LINQ 与动态集合一起使用

C# 位图为 Format8bppIndexed 设置像素值

java - 2个箭头和3个箭头的位移位有什么区别?

c++ - 在相反方向上具有相同常数的C++移位,在较小的代码更改下结果不同