您的位置:首页 > 编程语言 > Java开发

Java中的数据类型

2016-03-10 16:05 555 查看
1 bit     = 1  二进制数据

1 byte  = 8  bit

1 汉字 = 2  byte = 16 bit

1. bit:位
    一个二进制数据0或1,是1bit;
2. byte:字节
    存储空间的基本计量单位,如:MySQL中定义 VARCHAR(45)  即是指 45个字节;
    1 byte = 8 bit

Byte:有符号整形 用二进制表示时候最高位为符号位 0代表正数 1代表负数 8bit -128(-2^7     1000 0000) --- 127(2^7 - 1     0111 1111)
正数在计算机中是以原码形式存在的,负数在计算机中是以其补码(负数的绝对值的原码转为二进制再按位取反后加1)形式存在的
Short:作为2字节16位有符号整形
Int:作为4字节32位有符号整形
Long:作为8字节64位有符号整形
Char作为16位无符号整形 其范围为 0 -- 2的15次方(最小:'\u0000' 最大:'\uFFFF')
Float作为32位的浮点型
Double 作为64为浮点型

2^7 = 128
2^15 = 65536
2^31 = 2147483648
2^63 = 9223372036854775808

/**
* Java中的位,字节,字母,汉字之间的关系
* @see =========================
* @see 1 bit  = 1 二进制数据
* @see 1 byte = 8 bit (范围:-128到+127)
* @see 1 字母 = 1 byte = 8 bit
* @see 1 汉字 = 2 byte = 16 bit
*
*/    www.2cto.com
public class ByteDemo {
/**
* @see 控制台打印结果,如下
* @see 4
* @see 4
* @see ----------------------------
* @see str=ABab
* @see 65
* @see 66
* @see 97
* @see 98
* @see ----------------------------
* @see name=玄玉
* @see -48
* @see -2
* @see -45
* @see -15
* @see ----------------------------
*/
@SuppressWarnings("unused")
public static void main(String[] args) {
//byte bb11 = 128;  //cannot convert from int to byte
//byte bb22 = -129; //cannot convert from int to byte
byte bb11 = 127;
byte bb22 = -128;
byte bb33 = 56;

//byte bb44 = '玄'; //错误,因为: 1汉字==2字节
//byte bb55 = 'bb'; //错误,因为: 'bb'==2字节
byte bb44 = 'b';
byte bb55 = 'B';
byte bb66 = 'Z';

//int i11 = "玄玉";  //1 int = 32 bit, but int is numeral
//short ss = '玄玉'; //1 short = 2 byte = 16 bit = 1 汉字
short ss11 = '玄';

//char cc11 = '玄玉'; //这样是不可以的
//char cc22 = 'cc';  //这样是不可以的
char cc11 = '玄';
char cc22 = 'c';

String str = "ABab";
byte[] data = str.getBytes();
System.out.println(str.length());
System.out.println(data.length);
System.out.println("----------------------------");

System.out.println("str=" + new String(data));
for(int i=0; i<data.length; i++){
System.out.println(data[i]);
}
System.out.println("----------------------------");

byte[] name = "玄玉".getBytes();
System.out.println("name=" + new String(name));
for(int i=0; i<name.length; i++){
System.out.println(name[i]);
}
System.out.println("----------------------------");
}
}

   

package com.test;
import java.util.Arrays;
public class T {
/**
* 将byte转换为一个长度为8的byte数组,数组每个值代表bit
*/
public static byte[] getBooleanArray(byte b) {
byte[] array = new byte[8];
for (int i = 7; i >= 0; i--) {
array[i] = (byte)(b & 1);
b = (byte) (b >> 1);
}
return array;
}
/**
* 把byte转为字符串的bit
*/
public static String byteToBit(byte b) {
return ""
+ (byte) ((b >> 7) & 0x1) + (byte) ((b >> 6) & 0x1)
+ (byte) ((b >> 5) & 0x1) + (byte) ((b >> 4) & 0x1)
+ (byte) ((b >> 3) & 0x1) + (byte) ((b >> 2) & 0x1)
+ (byte) ((b >> 1) & 0x1) + (byte) ((b >> 0) & 0x1);
}
public static void main(String[] args) {
byte b = 0x35; // 0011 0101
// 输出 [0, 0, 1, 1, 0, 1, 0, 1]
System.out.println(Arrays.toString(getBooleanArray(b)));
// 输出 00110101
System.out.println(byteToBit(b));
// JDK自带的方法,会忽略前面的 0
System.out.println(Integer.toBinaryString(0x35));
}
}

   

/**
* 二进制字符串转byte
*/
public static byte decodeBinaryString(String byteStr) {
int re, len;
if (null == byteStr) {
return 0;
}
len = byteStr.length();
if (len != 4 && len != 8) {
return 0;
}
if (len == 8) {// 8 bit处理
if (byteStr.charAt(0) == '0') {// 正数
re = Integer.parseInt(byteStr, 2);
} else {// 负数
re = Integer.parseInt(byteStr, 2) - 256;
}
} else {// 4 bit处理
re = Integer.parseInt(byteStr, 2);
}
return (byte) re;
}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: