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'
};
}

IntegerToBinaryString的更多相关文章

  1. Java中处理二进制移位

    我相信,这篇文章读起来会相当有趣. 文章中编程语言是Java,用Java的原因:第一,Java不做数据溢出校验,这样我们可以忽略溢出异常:第二,Java普及率比较高,就像是python或shell,几 ...

随机推荐

  1. Oracle-定时任务

    PLSQL->新建->命令行窗口 --存储过程 create or replace procedure prd_remove_error_data AS BEGIN UPDATE rpt_ ...

  2. 使用Dropzone上传图片及回显演示样例

    一.图片上传所涉及到的问题 1.HTML页面中引入这么一段代码 <div class="row"> <div class="col-md-12" ...

  3. MapReduce编程之倒排索引

    任务要求: //输入文件格式 18661629496 110 13107702446 110 1234567 120 2345678 120 987654 110 2897839274 1866162 ...

  4. 如何用写js弹出层 ----2017-03-29

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  5. iis 部署

    配置错误1: 由于权限不足而无法读取配置文件 建立一个新用户,分配所有权限 http://blog.csdn.net/jaychouliyu/article/details/7237143 配置错误2 ...

  6. ROS-机器人建模与仿真概论

    前言:无论是因为高昂的设备费用还是为了减少实验次数,仿真都是十分必要的. ROS提供了很多优秀的仿真方式,下面来介绍一下: URDF:Unified Robot Description Format, ...

  7. 个人对于React的Diff算法的一点疑问(待更新)

    本人对于Diff算法也并未做深入研究,只是大概的看过一些博文了解了些原理,但依然有了如下疑问 : 对于vdom所表示的对象中,若在该oldObj和newObj之间,发现一个元素节点所表示的子对象不见了 ...

  8. C++逐行读取文本文件的正确做法

    作者:朱金灿 来源:http://blog.csdn.net/clever101 之前写了一个分析huson日志的控制台程序,其中涉及到C++逐行读取文本文件的做法,代码是这样写的: ifstream ...

  9. Spinner与适配器模式总结

    今天开始编辑我的第一篇博客. ------------------------------------------------------------------------------------- ...

  10. Navicat for Mysql 关于1130错误,无法正常方法解决的解决办法。

    本人因为失误操作,不小心将mysql 玩崩了.导致一直报1130错误,无法进入. 看了很多网上的帖子,但是那些办法都行不通.最后通过好友的指点,解决了这个问题.   1.停止MySQL服务,执行net ...