计算整数的二进制表示形式

标签 c

我必须计算整数的二进制表示形式的长度。 我尝试过这样的事情:

int binaryLength(int n)
{
      int i = 32;
      while (i > 0)
      {
           if (n >> i & 1) break;
           else i--;
       }
       return i;
 }

但是当我有像 9 (1001) 这样的数字时,这个函数会返回 32。

最佳答案

如果我是你,我会放弃循环方法。

这是我所知道的最快的方法 - 专门针对 32 位 int 进行编码。它不适用于负整数(负整数的位模式无论如何都是依赖于平台的)。为 64 位 int 添加额外的一行;该计划应该是显而易见的。

int binaryLength(int n)
{
    int i = 0; // the minimum number of bits required.
    if (n >= 0x7FFF) {n >>= 16; i += 16;}
    if (n >= 0x7F) {n >>= 8; i += 8;}
    if (n >= 0x7) {n >>= 4; i += 4;}
    if (n >= 0x3) {n >>= 2; i += 2;}
    if (n >= 0x1) {n >>= 1; i += 1;}
    return i;
}

关于计算整数的二进制表示形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40843839/

相关文章:

c++ - for循环的增量语句中的奇数位运算符

C 程序在编译和链接后生成包含 edata 部分的 EXE 文件?

c - Vim 交换删除选项不存在

c - nftw 目录的总大小与 du 输出不同

c - Misra-C 2012 规则 10.1 bool 操作数用于表达式为 bool 类型的情况

c - C中递归函数枚举并返回二维数组n选k的所有组合

java - 如何防止 Eclipse 自动删除我的 exe 文件

c - 在C中添加不同类型的变量

c - 服务器绑定(bind)导致错误 "Cannot assign requested address"?

c - 从文件中读取未知数量的结构 - C