题1.  给定一个无符号整型数据(unsigned int),找出其对应二进制数据中bit位为1的最高/低索引。

  比如:对于数据0,返回0;数据1,返回1;数据0x80000000,返回32;

题2.  给定一个无符号64bit整型数据(unsigned long long int),找出其对应二进制数据中bit位为1的最高/低索引。

  比如:对于数据0,返回0;数据1,返回1;数据0x4000000000000000,返回63;  

题3.  给定一个无符号长整型数据(unsigned long int),找出其对应二进制数据中bit位为1的最高/低索引。

>对于题1:

/*
  方法一:二分法
*/
int fls(unsigned int x)
{
int r=;
if(!x)
return ;
if(!(x&0xffff0000u)){
x<<=;
r-=;
}
if(!(x&0xff000000u)){
x<<=;
r-=;
}
if(!(x&0xf0000000UL)){
x<<=;
r-=;
}
if(!(x&0xc0000000UL)){
x<<=;
r-=;
}
if(!(x&0x80000000UL)){
x<<=;
r-=;
}
return r;
}
/*
  方法二:遍历法
*/
int fls(unsigned int x)
{
    int i,pos=0;
    for(i=1;i<=32;++i){
        if(x&0x1)
            pos=i;
        x>>=1;
    }
    return pos;
}

>对于题2:

  unsigned long long int为64bit数据,借助题1实现

int fls_64(unsigned long long int x)
{
unsigned int _x= x>>;
if(_x)
return fls(_x)+;
return fls(x);
}

>对于题3:

  由于unsigned long int类型的size会根据编译器的不同而不同,所以应该考虑无符号长整型为8byte和4byte的情况。总和题1/2

int fls_long(unsigned long int x)
{
    if (sizeof(x) == 4)
        return fls(x);
    return fls_64(x);
}

欢迎大家批评指正  |;-)

找出二进制数中bit为1的最(高/低)索引的更多相关文章

  1. Python3找出List中最大_最小的N个数及索引

    # -*- coding: utf-8 -*- import heapq nums = [1, 8, 2, 23, 7, -4, 18, 23, 24, 37, 2] # 最大的3个数的索引 max_ ...

  2. [LeetCode] Find All Numbers Disappeared in an Array 找出数组中所有消失的数字

    Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and ot ...

  3. 剑指Offer 找出字符串中第一个只出现一次的字符

    题目描述 找出字符串中第一个只出现一次的字符 如果无此字符 请输出'.' 输入描述: 输入一串字符,由小写字母组成 输出描述: 输出一个字符 输入例子: asdfasdfo 输出例子: o 思路:数组 ...

  4. 找出字符串中第一个不重复的字符(JavaScript实现)

    如题~ 此算法仅供参考,小菜基本不懂高深的算法,只能用最朴实的思想去表达. //找出字符串中第一个不重复的字符 // firstUniqueChar("vdctdvc"); --& ...

  5. 剑指Offer:找出数组中出现次数超过一半的元素

    题目:找出数组中出现次数超过一半的元素 解法:每次删除数组中两个不同的元素,删除后,要查找的那个元素的个数仍然超过删除后的元素总数的一半 #include <stdio.h> int ha ...

  6. 找出数组中出现奇数次的元素<异或的应用>

    点击打开链接:百度面试题之找出数组中之出现一次的两个数(异或的巧妙应用) 题目描述|:给定一个包含n个整数的数组a,其中只有一个整数出现奇数次,其他整数都出现偶数次,请找出这个整数 使用异或操作,因为 ...

  7. 找出数组中出现次数超过一半的数,现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数

    找出数组中出现次数超过一半的数,现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数 #include<iostream>using namespace s ...

  8. 找出数组中最大值and索引

    找出数组中的最大值和和最大值的索引位置..... 第一中方法: /** * 找出数组中最大值和最大值的索引 * @param args */ public static void main(Strin ...

  9. 剑指offer:1.找出数组中重复的数(java版)

    数组中重复的数:题目:找出数组中重复的数,题目描述:在一个长度为n的数组里的所有数字都在0到n-1的范围内.数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任 ...

随机推荐

  1. 第03组 Alpha冲刺

    队名:不等式方程组 组长博客 作业博客 团队项目进度 组员一:张逸杰(组长) 过去两天完成的任务: 文字/口头描述: 制定了初步的项目计划,并开始学习一些推荐.搜索类算法 GitHub签入纪录: 暂无 ...

  2. pytesseract.pytesseract.TesseractError: (1, 'Error opening data file /usr/local/share/tessdata/chi_sim.traineddata Please make sure the TESSDATA_PREFIX environment variable is set to your "tessdata"

    pytesseract.pytesseract.TesseractError: (1, 'Error opening data file /usr/local/share/tessdata/chi_s ...

  3. python 虚拟环境指定python版本

    virtualenv --no-site-packages -p python3.7 testenv source testenv/bin/activate deactivate 参考:https:/ ...

  4. shell for循环输出目录下的文件名

    test.sh文件: #!/bin/bash for file in `ls`;do echo $file done 输出 bogon:test macname$ chmod +x test.sh b ...

  5. 关于windows下的libtorch配置

    关于windows下的libtorch配置 1.环境 Windows service 2012 R2/Windows10 Cuda 9.0 OpenCV3.4.1 Libtorch1.0 VS2017 ...

  6. ~/.ssh/config文件的使用

    Host github-A HostName github.com User git IdentityFile /Users/xxx/.ssh/id_rsa_A IdentitiesOnly yes ...

  7. centos7安装hadoop2.7.7

    下载hadoop-2.7.7 网址如下 https://www-eu.apache.org/dist/hadoop/core/ 移动到/opt 路径下 在/opt下新建一个文件夹,名为app mkdi ...

  8. GoodNotes 模板分享

    画了一个A4纸模板,分享出来: 模板下载 原始PSD下载

  9. SAS PROC SGPLOT

    OPTIONS LS=MAX PS=MAX NOCENTER USER='.\00@Data'; PROC PRINT DATA=OpenDate;RUN; ODS LISTING GPATH='.\ ...

  10. mstar安卓智能电视方案源代码常用修改

    优先 替换 Supernova\projects\customerinfo\inc\Customer_Info.h替换 内核中linux/drivers/mmc/core/mmc.c文件 1, key ...