• IntegerToBinaryString


    IntegerToBinaryString

    方法写的非常的巧妙;佩服佩服!

    package com.stono.jdk;
    
    public class IntegerToBinaryString {
        public static void main(String[] args) {
            
            integerToBinaryString(); // jdk中的方法,调用toUnsignedString方法
            step1(); // 1<< shift 
            string(); // string构造函数
            integerToHexString(); // jdk中的方法,调用toUnsignedString方法
            integerToUnsignedString(); // jdk中的方法,Integer中的,但是是私有的,最多还可以计算一下32进制的数字;
        }
        
        private static void integerToUnsignedString() {
            int i = 2100000000; // 输入:需要转换的数字
            i = 31;
            i = 63;
            int shift = 5; // 输入:移位数量, 如果是5,那么就是32进制了;
            // shift = 6; // 如果是6,那么就是64进制了; digits没有这么多位数;
            System.out.println("digits.length: "+digits.length); // 最多也就是36位了;
            
            char[] buf = new char[32]; // 最多是32位,如果计算16进制就用不了那么多位数了;
            int charPos = 32;
            int radix = 1 << shift;
            int mask = radix - 1;
            System.out.println("mask:" + Integer.toBinaryString(mask));
            do {
                buf[--charPos] = digits[i & mask]; // 从数组的最后一位开始赋值,这样就可以形成正常的字符串
                i >>>= shift; // 无符号右移
            } while (i != 0);
    
            String stringReturn = new String(buf, charPos, (32 - charPos)); // string的一种构造方法
            System.out.println("charPos: "+charPos);
            System.out.println(buf);
            System.out.println(stringReturn);
        }
    
        private static void integerToHexString() {
            int i = 2100000000; // 输入:需要转换的数字
            i = 11;
            int shift = 4; // 输入:移位数量,Hex是十六进制,这样就可以四个四个的计算
            
            char[] buf = new char[32]; // 最多是32位,如果计算16进制就用不了那么多位数了;
            int charPos = 32;
            int radix = 1 << shift;
            int mask = radix - 1;
            System.out.println("mask:" + Integer.toBinaryString(mask));
            do {
                buf[--charPos] = digits[i & mask]; // 从数组的最后一位开始赋值,这样就可以形成正常的字符串
                i >>>= shift; // 无符号右移
            } while (i != 0);
    
            String stringReturn = new String(buf, charPos, (32 - charPos)); // string的一种构造方法
            System.out.println("charPos: "+charPos);
            System.out.println(buf);
            System.out.println(stringReturn);
        }
    
        private static void string() {
            String string = new String(digits,0,3); // string构造函数,从0开始,3个元素
            System.out.println(string);
            /** The value is used for character storage. */
            // private final char value[];
            // 字符串中就是使用char数组来存储字符串内容的;
            // 这种构造函数用到了Arrays.copyOfRange,里面用到了System.arraycopy,这是个native方法
        }
    
        private static void step1() {
            int shift = 1;
            int radix = 1<<shift; // 把1左移一位
            System.out.println(radix);
            int mask = radix - 1; // 再减去1,
            System.out.println(mask);
            shift = 2;
            radix = 1<<shift; // 如果shift是2,左移两位
            System.out.println(radix);
            mask = radix - 1; // 再减去1,
            System.out.println(mask);
            // 这样把shift位数的都填上1;
        }
    
        // jdk中的方法
        private static void integerToBinaryString() {
            int i = 2100000000; // 输入:需要转换的数字
            i = 1;
            int shift = 1; // 输入:移位数量
            
            char[] buf = new char[32];
            int charPos = 32;
            int radix = 1 << shift;
            int mask = radix - 1;
            do {
                buf[--charPos] = digits[i & mask]; // 从数组的最后一位开始赋值,这样就可以形成正常的字符串
                i >>>= shift;
            } while (i != 0);
    
            String stringReturn = new String(buf, charPos, (32 - charPos)); // string的一种构造方法
            System.out.println("charPos: "+charPos);
            System.out.println(buf);
            System.out.println(stringReturn);
            System.out.println(Integer.toBinaryString(-1));
            
        }
        final static char[] digits = {
                '0' , '1' , '2' , '3' , '4' , '5' ,
                '6' , '7' , '8' , '9' , 'a' , 'b' ,
                'c' , 'd' , 'e' , 'f' , 'g' , 'h' ,
                'i' , 'j' , 'k' , 'l' , 'm' , 'n' ,
                'o' , 'p' , 'q' , 'r' , 's' , 't' ,
                'u' , 'v' , 'w' , 'x' , 'y' , 'z'
                };
    }
  • 相关阅读:
    正则表达式
    python最新版mplfinance中文乱码解决方法
    Python学习笔记:pandas.read_csv分块读取大文件(chunksize、iterator=True)
    pandas,读取或存储DataFrames的数据到mysql中
    BaoStock:使用python的baostock接口,查询季频盈利能力
    win10解决Mysql net start mysql启动,提示发生系统错误 5 拒绝访问
    mysql5.7 本地计算机上的mysql 服务启动后停止 的问题
    获取A股所有的股票代码
    phpcms <= v9.15 任意文件读取漏洞的分析和利用
    ubuntu系统安装搜狗法并设置不能切换的问题解决
  • 原文地址:https://www.cnblogs.com/stono/p/8213299.html
Copyright © 2020-2023  润新知