c - 如何删除 C 中的所有赔率位?

标签 c bit-manipulation bit

我有 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) - 因为这些位没有信息。

怎么做?

最佳答案

  1. 新建一个整数,初始化为0

  2. 使用 for 循环从 0 迭代到原始整数中位数的一半(不包括在内)

  3. 对于循环中的每次运行,将原始整数与 (1 << (i * 2)) 相加。如果它不为零,则将新整数与 (1 << i)

  4. 结局

编辑:再次查看示例,您实际上 想要的是删除所有 偶数 位,而不是奇数位。因此,只需将步骤 3 中的原始整数与 (1 << (i * 2 + 1)) 相加即可。

编辑 2:从您的示例看来,您正在使用 32 位整数,但只是为了涵盖所有基数,我要补充一点,如果您的整数实际上是 64 位,您应该将 1 替换为第 3 步中的 1ULL

关于c - 如何删除 C 中的所有赔率位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45694690/

相关文章:

c - 如果出现错误,SDL_GetError 会说什么?

java - 字符串以位的形式存储在内存中

c - 如何在 CPP 的 SQLite 中截断表?

c++ - 使用 clang API 编译程序

artificial-intelligence - 获取位板的占用位掩码

java - 计算二进制字的奇偶校验

c - 在 C 中以 64 位读取和写入 64 位

Rust 为什么 (u32, u32) 的枚举变体的大小小于 (u64)?

c - 在c中增加 union 数据

java - 为什么 AS3 右移位与 Java 中的右移位不同?