我正在尝试找到一种从整数中删除一位的方法。该解决方案不得使用字符串操作。 例如,我有数字 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/