zoukankan      html  css  js  c++  java
  • 提取一个int类型数最右侧的1

    提取一个int类型数最右侧的1

    算法描述

    把一个int类型的数,提取出最右侧的1来,例如:

    6 对应的二进制位 0000 0110,那么取出来的应该是0000 0010

    算法思路

    对原数0000 0110取反,将原数右侧1右边的0位全变成了1(1111 1001),
    这时候如果加1,会产生进位到原数右侧非零位,信息得以记录,再与原数与操作,即可将1提取.
    

    图示:

    代码:

    public static void findBit1RightNumber(int number){
        int temp = ~number;
        temp += 1;
        temp = number & temp;
        System.out.println("取出右边的1为:"+intToBinary(temp));
    }
    
    /**
    * 这一段是工具,将整数转二进制,前面补零
    * */
    
    public static String intToBinary(int num){
        //1.补零
        String binaryStr = Integer.toBinaryString(num);
        int bitNum = 8;
        if(bitNum<binaryStr.length()) {
            bitNum += bitNum;//不断翻倍8 16 32 64...
        }
        while(binaryStr.length() < bitNum){
            binaryStr = "0"+binaryStr;
        }
        //2.格式化
        String str = "";
        for (int i = 0; i < binaryStr.length();) {
            str += binaryStr.substring(i, i=i+4)+",";
        }
        return str.substring(0, str.length()-1);
    }
    
  • 相关阅读:
    About cookie
    关于在Servlet中的Fileter
    看完这篇正则表达式,50岁的马化腾眼睛湿润了
    Tutorial中的hello2代码
    Development descriptor
    What is the Annotation?
    剖析容器的注入技术
    LDAP & Implentation
    RESTful levels、HATEOAS
    Mysql8.0导入数据时出错
  • 原文地址:https://www.cnblogs.com/Courage129/p/14145447.html
Copyright © 2011-2022 走看看