• java中的Integer的toBinaryString()方法


    在一次面试的过程中,遇到过这样的题目,题目的大概意思是:让写出Integer类中的toBinaryString()方法

    也就是说,把Integer转换为Binary的过程写出来

    但是我蒙的,在查了JDK的源码,发现了这个很好用的方法,在此给大伙看看

    下面是我做的一个测试:

     1 /**
     2  * 
     3  */
     4 package com.b510.test;
     5 
     6 /**
     7  * @author Hongten
     8  * @date 2013-12-15
     9  */
    10 public class TestF {
    11 
    12     public static void main(String[] args) {
    13         //output:1000
    14         System.out.println(toBinaryString(8));
    15         //printInfo();
    16     }
    17     
    18     /**
    19      * 这里是做&操作的测试,也就是说,在1&*(其中*代表其他数字,如:0,1,2,3,4...)操作的时候
    20      * 他们是进行二进制之间的&(与)运算操作。只有当*为奇数(1,3,5,7...)的时候,1*&操作才可以返回:1
    21      * 其他情况返回:0
    22      */
    23     private static void printInfo(){
    24         for(int i =0; i< 10; i++){
    25             System.out.println("i= " + i + "         "+(i & 1));
    26         }
    27         /*
    28         output:
    29         i= 0         0
    30         i= 1         1
    31         i= 2         0
    32         i= 3         1
    33         i= 4         0
    34         i= 5         1
    35         i= 6         0
    36         i= 7         1
    37         i= 8         0
    38         i= 9         1
    39         */
    40     }
    41     
    42     public static String toBinaryString(int i) {
    43         return toUnsignedString(i, 1);
    44     }
    45 
    46     /**
    47      * Convert the integer to an unsigned number.
    48      */
    49     private static String toUnsignedString(int i, int shift) {
    50         char[] buf = new char[32];
    51         int charPos = 32;
    52         int radix = 1 << shift;
    53         int mask = radix - 1;
    54         do {
    55             //这里的mask一直为:1,所以当i为奇数的时候,这里"i & mask"操作才为:1
    56             //否则返回:0
    57             //System.out.println(i & mask); 
    58             buf[--charPos] = digits[i & mask];
    59             i >>>= shift;//右移赋值,左边空出的位以0填充
    60         //System.out.println(buf);
    61         //System.out.println(charPos);
    62         //System.out.println(i);
    63         } while (i != 0);
    64         return new String(buf, charPos, (32 - charPos));
    65     }
    66     
    67     final static char[] digits = {
    68         '0' , '1' , '2' , '3' , '4' , '5' ,
    69         '6' , '7' , '8' , '9' , 'a' , 'b' ,
    70         'c' , 'd' , 'e' , 'f' , 'g' , 'h' ,
    71         'i' , 'j' , 'k' , 'l' , 'm' , 'n' ,
    72         'o' , 'p' , 'q' , 'r' , 's' , 't' ,
    73         'u' , 'v' , 'w' , 'x' , 'y' , 'z'
    74         };
    75 }

    在代码中,其实我们可以简化一下digits数组,因为我们只会用到数组:digits[0],digits[1]

    所以:

    1 final static char[] digits = {
    2         '0' , '1' 
    3         };

    方法里面用到了移位操作和&操作,这两个操作是关键。

    ========================================================

    More reading,and english is important.

    I'm Hongten

     

    大哥哥大姐姐,觉得有用打赏点哦!多多少少没关系,一分也是对我的支持和鼓励。谢谢。
    Hongten博客排名在100名以内。粉丝过千。
    Hongten出品,必是精品。

    E | hongtenzone@foxmail.com  B | http://www.cnblogs.com/hongten

    ========================================================

  • 相关阅读:
    C++面试题
    kalman滤波原理
    开blog
    Linux图片批处理
    Debian使用相关
    Ubuntu grub引导修复
    Debian系统vim中文显示乱码问题
    Debian配置Apache2支持mod-python和cgi模块
    linux下解压被分割的zip文件
    Ubuntu 16.04 启动错误 "a start job is running for hold until boot process finishes up"
  • 原文地址:https://www.cnblogs.com/hongten/p/hongten_java_integer_toBinaryString.html
Copyright © 2020-2023  润新知