关于java中的八大基本数据类型

来源:互联网 发布:易语言种子搜索源码 编辑:程序博客网 时间:2024/05/17 07:23
Java 数据类型: 分为引用类型和基本数据类型
 1) 基本数据类型: 8种
   byte, short, int, long
   float, double 
   char
   boolean
 2) 整数类型  byte, short, int, long, 都是有符号(补码)整数
  byte   8位补码     最大值 0x7f  127  最小值 0x80 -128
  short 16位有符号数 0x7fff 32767  0x8000 -32768
  int   32位         0x7fffffff 2G-1 2^31-1 21亿 0x80000000 -2G 
  int的精度是32位,范围是-2^(32-1)~2^(32-1)-1
  long  64位 ....
  long的精度是64位,范围是-2^(64-1)~2^(64-1)-1
  整数字面量(直接量) 默认是int类型, 如果不超出范围, 可以给
  小类型变量直接赋值.
  使用整数类型(byte, short, int) 要注意取值范围, 超范围运算
  java 底层byte,short 按照32位计算
  
  long 类型的字面量使用"L","l" 后缀
  
 3) 浮点数, 小数 (不必掌握 浮点数的存储方式)
  IEEE 754 
  浮点数原理: 10进制浮点数(科学计数法)原理
    2356189. = 235618.9 * 10
             = 23561.89 * 10^2
             = 2356.189 * 10^3
             = .2356189 * 10^7
  概念: 尾数: .2356189 (精度)
       指数: 7 (范围)
       基数: 10
   
   3.14 * 100 (范围大)
   3.1415926535 (精确)
   
  pi = 3.14
       3.1415926535897932384626433
  
       
  二进制浮点数:
    101001010101. = 10100101010.1 * 2
                  = 1010010101.01 * 2^10
                  = 101001010.101 * 2^11 
                  = .101001010101 * 2^1100
  概念: 尾数(有效尾数): .101001010101
       指数: 1100
       基数: 2
       
 float: 32位 其中: 1位符号位, 8位指数, 23位尾数
float为单精度浮点型,其精度也就是其尾数,23 位
其表示数值的范围也就是其指数位
-2^(2^(8-1))~2^(2^(8-1))-1

  int max = 01111111 11111111 11111111 11111111
  float f = 1.111111 11111111 11111111 1 * 2^00011110
 
 double: 64位 其中: 1位符号位, 11位指数, 52位尾数
 double为双精度浮点型,其精度也就是其尾数,52 位
 其表示数值的范围也就是其指数位
-2^(2^(11-1))~2^(2^(11-1))
 
 浮点数的字面量: 默认是double, D d 后缀是double, f F 是float


在这里需要说的是,经常有提到int,long,float,double这些数据类型之间

的数值范围或精度作比较,所以今天在这里也对此做一个归纳:

(数值范围所表示的是2的次幂数)

数值范围(由小到大):int(+/-(32-1)),long(+/-(64-1)),float(+/-2^(8-1)),double(+/-2^(11-1))
精度(由小到大):float(23),int(31),double(52),long(63)

 
 4) 字符类型 char, 字符是一个16位无符号整数, 是一个二进制数
   数值是一个字符的unicode编码值. 
   unicode 编码: 是全球范围内的编码方法, 编制了英文, 中,日,韩
   阿拉伯, 希伯来, ..... 8万+ 字符
   其中英文部分与ASCII 兼容, 英文字符和数字是连续编码的.
   
   中: 20013  田:30000
   
   
   ASCII: 0~128
   Java char 的范围 0~65535 不能表示全部unicode 但是可以表示
   unicode只能够最常用的部分
   
   *最小值:0, 最大值:65535 = 2^16-1
   *字符字面量使用单引号为定界符号:'中' == 20013 == 0x4e2d
     字面量也是整数常量!
     特殊字符采用转义字符表示:
     如: '\n' '\t' '\\' '\b' '\r' 
        '\'' '\"'  '\u4e2d' 
   
     char c = '\\';
     
     'X' - 'A' = N
     'x' - 'a' = N
     X  = 'c' - 'a' + 'A'
  
  5) boolean 布尔类型 表达: 真(true)/假(false)
   建议使用长变量名定义变量
   boolean started = true;
   boolean isMan = true; //纯爷们!
   isMan = false;
   boolean used = true;//二手的
   boolean married = false;
   if(used){
    System.out.println("打八折"); 
   }
   不建议 定义没有意义的变量
   boolean u = true;//u = you
   boolean flag = false;
   
   if(flag){
    System.out.println("打八折"); 
   }  
   
   Person she;
   Person he;
   she.kill(he);   
   
   Person a;
   Person b;
   a.s(b);
 
4. 数据类型转换 
           char ->
   byte -> short -> int -> long -> float -> double
    
 1) 自动类型转换,正方向,小类型到大类型的转换会自动完成
   符号位会自动扩展, 负数补1, 正数补0, 保证补码数值不变
   注意, 整数到浮点数转换会损失精确度
   自动类型转换也叫"隐式类型转换", 是自动发生的, 一般不需要处理
  
   int i = -1;
   long l = i;
 
 2) 强制类型转换(显示类型转换), 需求明确处理, 是按照反方向,进行
 的转换, 这种转换会溢出, 或者损失精度. 要注意数据的范围
 int i = 128+256;// 00000000 00000000 00000001 10000000 
 byte b = (byte)i;//-128
 
 long l=0xf80000000L;
 int c = (int)l;//负数(long->int 为大类型向小类型,需强制转换)
 
 long x=c;//小类型向大类型,隐式转换,不必强转


 l = 8;
 int d = (int)l;
 
 float pi = (float)3.1415926535;//损失精度
 
 char c = '0';
 char x = (char)(c+2);
原创粉丝点击