char与byte的区别,java中的Integer的toBinaryString()方法
2015-05-06 15:44
513 查看
byte 是字节数据类型 ,是有符号型的,占1 个字节;大小范围为-128—127 。char 是字符数据类型 ,是无符号型的,占2字节(Unicode码 );大小范围 是0—65535 ;char是一个16位二进制的Unicode字符,JAVA用char来表示一个字符 。
下面用实例来比较一下二者的区别:
1、Char是无符号型的,可以表示一个整数,不能表示负数;而byte是有符号型的,可以表示-128—127 的数;如:
[html] view
plaincopyprint?
char c = (char) -3; // char不能识别负数,必须强制转换否则报错,即使强制转换之后,也无法识别
System.out.println(c);
byte d1 = 1;
byte d2 = -1;
byte d3 = 127; // 如果是byte d3 = 128;会报错
byte d4 = -128; // 如果是byte d4 = -129;会报错
System.out.println(d1);
System.out.println(d2);
System.out.println(d3);
System.out.println(d4);
结果为:
?
1
-1
127
-128
2、char可以表中文字符,byte不可以,如:
[html] view
plaincopyprint?
char e1 = '中', e2 = '国';
byte f= (byte) '中'; //必须强制转换否则报错
System.out.println(e1);
System.out.println(e2);
System.out.println(f);
结果为:
中
国
45
3、char、byte、int对于英文字符,可以相互转化,如:
[html] view
plaincopyprint?
byte g = 'b'; //b对应ASCII是98
char h = (char) g;
char i = 85; //U对应ASCII是85
int j = 'h'; //h对应ASCII是104
System.out.println(g);
System.out.println(h);
System.out.println(i);
System.out.println(j);
结果为:
98
b
U
104
在一次面试的过程中,遇到过这样的题目,题目的大概意思是:让写出Integer类中的toBinaryString()方法
也就是说,把Integer转换为Binary的过程写出来
但是我蒙的,在查了JDK的源码,发现了这个很好用的方法,在此给大伙看看
下面是我做的一个测试:
在代码中,其实我们可以简化一下digits数组,因为我们只会用到数组:digits[0],digits[1]
所以:
方法里面用到了移位操作和&操作,这两个操作是关键。
String a = "谷雨寒";
char [] str = a.toCharArray();
Integer.toBinaryString(str[0]);//str[0]返回的是ascii码
下面用实例来比较一下二者的区别:
1、Char是无符号型的,可以表示一个整数,不能表示负数;而byte是有符号型的,可以表示-128—127 的数;如:
[html] view
plaincopyprint?
char c = (char) -3; // char不能识别负数,必须强制转换否则报错,即使强制转换之后,也无法识别
System.out.println(c);
byte d1 = 1;
byte d2 = -1;
byte d3 = 127; // 如果是byte d3 = 128;会报错
byte d4 = -128; // 如果是byte d4 = -129;会报错
System.out.println(d1);
System.out.println(d2);
System.out.println(d3);
System.out.println(d4);
结果为:
?
1
-1
127
-128
2、char可以表中文字符,byte不可以,如:
[html] view
plaincopyprint?
char e1 = '中', e2 = '国';
byte f= (byte) '中'; //必须强制转换否则报错
System.out.println(e1);
System.out.println(e2);
System.out.println(f);
结果为:
中
国
45
3、char、byte、int对于英文字符,可以相互转化,如:
[html] view
plaincopyprint?
byte g = 'b'; //b对应ASCII是98
char h = (char) g;
char i = 85; //U对应ASCII是85
int j = 'h'; //h对应ASCII是104
System.out.println(g);
System.out.println(h);
System.out.println(i);
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: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 };
方法里面用到了移位操作和&操作,这两个操作是关键。
String a = "谷雨寒";
char [] str = a.toCharArray();
Integer.toBinaryString(str[0]);//str[0]返回的是ascii码
相关文章推荐
- java中的Integer的toBinaryString()方法
- java中的Integer的toBinaryString()方法实例
- java中的Integer的toBinaryString()方法
- 1.1.9 java用二进制表示十进制整数(不用Integer.toBinaryString(N)方法)
- Java: Integer.toBinaryString(int i) 方法翻译详解
- Java.lang.Byte.parseByte()方法 与String.getBytes()方法的区别
- java.lang.Long.toBinaryString()方法实例
- 【转】Java编码与乱码---String的toCharArray()方法
- Java String,int,Integer,char 类型转换 ,sizeof,strlen,length的区别 .
- java.lang.String cannot be cast to java.lang.Integer报错
- Java String compare to determine Equality(Java String类型比较的三种方法)
- android中遇到java.lang.NumberFormatException: unable to parse 'null' as integer此类问题的原因及解决方法
- Java打印charArray.toString()
- java本地方法调用(JNI)的参考代码----实现将String转换成char*,将char*转换成String.
- java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
- java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
- java byte与char、String互转原理
- JAVA中3种将byte转换为String的方法
- JAVA中3种将byte转换为String的方法
- deprecated conversion from string constant to 'char*' 解决方法