Java 語言基礎 Day02
====================
變量,
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