我有 int 136970250 (1000 0010 1010 0000 0000 0000 1010) -> 我需要删除所有奇数位(1、3、5、7...)
1000 0010 1010 0000 0000 0000 1010 -> 10 0111 0000 0011 (9987) - 因为这些位没有信息。
怎么做?
最佳答案
新建一个整数,初始化为0
使用 for 循环从 0 迭代到原始整数中位数的一半(不包括在内)
对于循环中的每次运行,将原始整数与
(1 << (i * 2))
相加。如果它不为零,则将新整数与(1 << i)
或结局
编辑:再次查看示例,您实际上 想要的是删除所有 偶数 位,而不是奇数位。因此,只需将步骤 3 中的原始整数与 (1 << (i * 2 + 1))
相加即可。
编辑 2:从您的示例看来,您正在使用 32 位整数,但只是为了涵盖所有基数,我要补充一点,如果您的整数实际上是 64 位,您应该将 1
替换为第 3 步中的 1ULL
。
关于c - 如何删除 C 中的所有赔率位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45694690/