day02基础

Java 语言基础 Day02
2012/2/27
====================
变量,
Java的变量存储(二进制)
Java的变量类型
数据类型转换

1. Java 变量
 1) 变量就是自然语言中的代词
   Person he; int age = 15;
   //age= 00000000 00000000 00000000 00001111
   System.out.println(age);//15
 2) Java 中的变量, Java是强类型语言,
   A 变量必须声明,并且初始化以后使用
   B 变量必须有明确的类型
   C 变量不能重复定义
 3) 变量的作用域
   a 在声明的地方开始,到块结束为止
   b 离开变量的作用域结束,变量将回收。

2. 进制转换基础
 1) 十进制
    逢10进1
    基数: 10
    权: 10^n,  10000 1000 100 10 1
    23678(10) = 2*10000+3*1000+6*100+7*10+8*1
              = 2*10^4 + 3*10^3 + 6*10^2 + 7*10^1 + 8*10^0
              = 23679
 
 2) 二进制
    逢2进1
    基数: 2
    权: 2^n,  128 64 32 16 8 4 2 1
    01000001(2) = 1*64 + 1*1
                = 65(10)
 3) 补码基础
      -128 10000000  11111111 11111111 11111111 10000000
10  2进制   ...       ...
     8421  11110111  11111111 11111111 11111111 11110111
-8   1000  11111000  11111111 11111111 11111111 11111000
-7   1001  11111001  11111111 11111111 11111111 11111001
-6   1010  11111010  11111111 11111111 11111111 11111010
-5   1011  11111011  11111111 11111111 11111111 11111011
-4   1100  11111100  11111111 11111111 11111111 11111100
-3   1101  11111101  11111111 11111111 11111111 11111101
-2   1110  11111110  11111111 11111111 11111111 11111110
-1   1111  11111111  11111111 11111111 11111111 11111111
 0   0000  00000000  00000000 00000000 00000000 00000000
 1   0001  00000001  00000000 00000000 00000000 00000001
 2   0010  00000010  00000000 00000000 00000000 00000010
 3   0011  00000011  00000000 00000000 00000000 00000011
 4   0100  00000100  00000000 00000000 00000000 00000100
 5   0101  00000101  00000000 00000000 00000000 00000101
 6   0110  00000110  00000000 00000000 00000000 00000110
 7   0111  00000111  00000000 00000000 00000000 00000111
           00001000  00000000 00000000 00000000 00001000
           ....      ...
       127 01111111  00000000 00000000 00000000 01111111
       128 --------  00000000 00000000 00000000 10000000
      
  补码运算:
  -1  1111
  -1  1111
 *
 ----------
      1111
     1111
    1111
   1111
   101010
 -----------
      0001
 
  4) A Java 内部只有二进制补码
     B Java 内部采用补码运算, 自动发送上溢出和下溢出
     C Java内部没有10进制! 但是Java尽量按照人类习惯输入输出
     D 补码的负数 最高位是 1, 也称作符号位
  5) 16进制, 是2进制的简写, 方便专业人员书写2进制数据
    16进制
    逢16进1
    基数: 16
    权: 16^n,  256 16 1
    16进制数字: 0 1 2 3 4 5 6 7 8 9 a  b  c  d  e  f
               0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  
    41(16) = 4*16 + 1*1
           = 65(10)
           = 0100 0001(2)
             8421 8421
             4    1   (16)
   
    128 64 32 16 8 4 2 1
     0   1  0 0  0 0 0 1
    练习:转换以下十进制为二进制 192(10)  137(10)   145(10)  
    192(10) = 1100 0000 (2)
              c    0    (16)
    -8(10) = fffffff8(16)
             
3. 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
  long  64位 ....   0x7fffffffffffffff
  整数字面量(直接量) 默认是int类型, 如果不超出范围, 可以给
  小类型直接赋值.
  使用整数类型(byte, short, int) 要注意取值范围, 超范围运算
  java 底层byte,short 按照32位计算
 
  long 类型的字面量使用"L","l" 后缀
 
 3) 浮点数, 小数 (不必掌握 浮点数的存储方式)
  浮点数原理: 10进制浮点数(科学计数法)原理
    2356189. = 2.356189 * 10^6
  概念: 尾数: 2.356189
       指数: 6
       基数: 10
  pi = 3.14
       3.1415926535897932384626433832
 
      
  二进制浮点数:
    101001010101. = 1.01001010101 * 2^1011
  概念: 尾数: 1.01001010101
       指数: 1011
       基数: 2
 
 float: 32位 其中: 1位符号位, 8位指数, 23位尾数
 精度: 23 位
  int max = 01111111 11111111 11111111 11111111
  float f = 1.111111 11111111 11111111 1 * 2^00011110
 
 double: 64位 其中: 1位符号位, 11位指数, 52位尾数
 
 浮点数的字面量: 默认是double, D d 后缀是double, f F 是float
 
 4) 字符类型 char, 字符是一个16位无符号整数, 是一个二进制数
   数值是一个字符的unicode编码值.
   unicode 编码: 是全球范围内的编码方法, 编制了英文, 中,日,韩
   阿拉伯, 希伯来, ..... 8万+ 字符
  
   中 : 20013
   A : 65  
  
   其中英文部分与ASCII 兼容, 英文字符和数字是连续编码的.
   ASCII: 0~128
   Java char 的范围 0~65535 不能表示全部unicode 但是可以表示
   unicode只能够最常用的部分
  
   *最小值:0, 最大值:65535 = 2^16-1
   *字符字面量使用单引号为定界符号:'中'
     字面量也是整数常量!
     特殊字符采用转义字符表示:
     如: '\n' newLine 换行
        '\r' return 回车
    '\t' tab
      '\\'
      '\b' backspace
      '\f' pagebreak
        '\''
        '\"'  '\u4e2d'
  
     char c = '\\';
    
     'c' -> 'C'
     'a'-'A' = x - X
     X = x - ('a'-'A');
 
  5) boolean 布尔类型 表达: 真(true)/假(false)
   建议使用长变量名定义变量
   boolean started = true;
   boolean isMan = true;
   isMan = false;
   boolean used = true;//二手的
   if(used){
     System.out.println("打八折");
   }
   if(isMan){
     //...
   }
   不建议 定义没有意义的变量
   boolean u = true;//u = you
   if(u){
     //....
   }
   boolean flag = false;
  
   if(flag){
     System.out.println("打八折");
   } 
 
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;//负数

 l = 8;
 int d = (int)l;
 
 float pi = (float)3.1415926535;//损失精度
 
 char c = '0';
 char x = (char)(c+2);
 
作业: 1 复习并且完成 全部 课堂演示代码, 添加适当的
         输出语句, 研究输出结果, 添加适当的注释.
      2 尝试 计算 10个以上 255 以内的整数转换为 2进制,
         16进制,相互转换. 并且编程验证计算结果
     
       提示: System.out.println(Integer.toHexString(234));
      
      3 (选做)定义方法: 参数是一个整数类型, 没有返回值,在
          方法中输出这个整数的10进制,2进制
          ,16进制字符串
        
      4 (选做)尝试实现 day02.png 中的案例, 在周末提交结果
      
      5 将人名字符的HEX编码输出, 手工转换为二进制, 并且验证结果
      
      提示: 可以使用Scanner输入用户数据
     
  预习: Java运算符, 流程控制语句. 参考Day03.txt

上一篇:记录lombok的使用


下一篇:day03基础