char与byte的区别,java中的Integer的toBinaryString()方法

来源:互联网 发布:ubuntu svn 库建立 编辑:程序博客网 时间:2024/06/06 07:25

byte 是字节数据类型 ,是有符号型的,占1 个字节;大小范围为-128—127 。char 是字符数据类型 ,是无符号型的,占2字节(Unicode码 );大小范围 是065535 ;char是一个16位二进制的Unicode字符,JAVAchar来表示一个字符 。


        下面用实例来比较一下二者的区别:

1、Char是无符号型的,可以表示一个整数,不能表示负数;而byte是有符号型的,可以表示-128—127 的数;如:

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. char c = (char) -3; // char不能识别负数,必须强制转换否则报错,即使强制转换之后,也无法识别  
  2. System.out.println(c);  
  3. byte d1 = 1;  
  4. byte d2 = -1;  
  5. byte d3 = 127; // 如果是byte d3 = 128;会报错  
  6. byte d4 = -128; // 如果是byte d4 = -129;会报错  
  7. System.out.println(d1);  
  8. System.out.println(d2);  
  9. System.out.println(d3);  
  10. System.out.println(d4);  

结果为:

?
1
-1
127
-128


2、char可以表中文字符,byte不可以,如:

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. char e1 = '中'e2 = '国';  
  2. byte f= (byte) '中'; //必须强制转换否则报错  
  3. System.out.println(e1);  
  4. System.out.println(e2);  
  5. System.out.println(f);  

结果为:



45


3、char、byteint对于英文字符,可以相互转化,如:

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. byte g = 'b';   //b对应ASCII是98  
  2. char h = (char) g;  
  3. char i = 85;    //U对应ASCII是85  
  4. int j = 'h';    //h对应ASCII是104  
  5. System.out.println(g);  
  6. System.out.println(h);  
  7. System.out.println(i);  
  8. System.out.println(j);  
结果为:
98
b
U
104




在一次面试的过程中,遇到过这样的题目,题目的大概意思是:让写出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:100014         System.out.println(toBinaryString(8));15         //printInfo();16     }17     18     /**19      * 这里是做&操作的测试,也就是说,在1&*(其中*代表其他数字,如:0,1,2,3,4...)操作的时候20      * 他们是进行二进制之间的&(与)运算操作。只有当*为奇数(1,3,5,7...)的时候,1*&操作才可以返回:121      * 其他情况返回:022      */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         030         i= 1         131         i= 2         032         i= 3         133         i= 4         034         i= 5         135         i= 6         036         i= 7         137         i= 8         038         i= 9         139         */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"操作才为:156             //否则返回:057             //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         };

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


String a = "谷雨寒";
char [] str = a.toCharArray();
Integer.toBinaryString(str[0]);//str[0]返回的是ascii码



0 0
原创粉丝点击