第二天 進位制運算&資料型別&變數
2.1 Java語言基礎(常量的概述和使用)
A:什麼是常量
在程式執行的過程中其值不可以發生改變
B:Java中常量的分類
字面值常量
自定義常量(面向物件部分講)
C:字面值常量的分類(6種常量)
字串常量:用雙引號括起來的內容
整數常量:所有整數(無限個)
小數常量:所有小數
字元常量:用單引號括起來的內容,裡面只能放單個數字,單個字母或單個符號
‘10’,’ab’非法的。
布林常量較為特殊,只有true和false
空常量 null(陣列部分講解)
D:案例演示
用輸出語句輸出各種常量。null不演示
2.2 進位制概述和二,八,十六進位制圖解
A.進位制:進位制,對於任何一種進位制—X進位制,就表示某一位置上的數運算時是逢X進一位,二進位制就是逢二進一,八進位制就是逢八進一,十進位制就是逢十進一,十六進位制是逢十六進一。
B.十進位制的由來
C.二進位制的由來
18世紀德國數理哲學大師萊布尼茲從他的傳教士朋友鮑威特寄給他的拉丁文譯本《易經》中,讀到了八卦的組成結構,驚奇地發現其基本素數(0)(1),即《易經》的陰爻- -和__陽爻,其進位制就是二進位制,並認為這是世界上數學進制中最先進的。
20世紀被稱作第三次科技革命的重要標誌之一的計算機的發明與應用,其運算模式正是二進位制。它不但證明了萊布尼茲的原理是正確的,同時也證明了《易經》數理學是很了不起的。
D:八進位制的由來
任何資料在計算機中都是以二進位制的形式存在的。二進位制早期由電訊號開關演變而來。一個整數在記憶體中一樣也是二進位制的,但是使用一大串的1或者0組成的數值進行使用很麻煩。
所以就想把一大串縮短點,將二進位制中的三位用一位表示。這三位可以取到的最大值就是7.超過7就進位了,這就是八進位制。
E:十六進位制的由來
但是對於過長的二進位制變成八進位制還是較長,所以出現的用4個二進位制位表示一位的情況,四個二進位制位最大是15,這就是十六進位制。
F:不同進製表現同一個資料的形式特點
不同進位制的表現形式
進位制越大,表現形式越短。
2.3 不同進位制資料的表現形式
A:二進位制的資料表現形式
由0,1組成。以0b(b可以大寫也可以小寫)開頭(JDK1.7版本可以表示二進位制了)
B:八進位制的資料表現形式
由0,1,…7組成。以0開頭
C:十進位制的資料表現形式
由0,1,…9組成。整數預設是十進位制的
D:十六進位制的資料表現形式
由0,1,…9,a,b,c,d,e,f(大小寫均可)。以0x開頭
2.4 任意進位制到十進位制的轉換圖解
A:任意進位制到十進位制的轉換原理
係數:就是每一位上的資料。
基數:X進位制,基數就是X。
權:在右邊,從0開始編號,對應位上的編號即為該位的權。
結果:把係數*基數的權次冪相加即可。
進位制互相轉換原理圖
注意去權次冪的時候,從0開始要數到係數的位置,從1開始的話,要少數一位。
2.5 十進位制轉任意進製圖解
A:十進位制到任意進位制的轉換原理
除積倒取餘
B:畫圖練習
2.6 快速的進位制轉換法
A:8421碼及特點
8421碼是中國大陸的叫法,8421碼是BCD程式碼中最常用的一種。在這種編碼方式中每一位二值程式碼的1都是代表一個固定數值,把每一位的1代表的十進位制數加起來,得到的結果就是它所代表的十進位制數碼。
B:通過8421碼的方式進行二進位制和十進位制的相互轉換
C:二進位制到八進位制的簡易方式
D:二進位制到十六進位制的簡易方式
‘’
八進位制數字 三個bit位為一組。
十六進位制,四個bit位為一組。
一個位元組佔八個個bit位。
一個字,兩個位元組,16個bit位置。
2.7 原碼反碼補碼
A:為什麼要講解有符號資料表示法
後面學習資料型別的時候,要學習強制型別轉換,如果不知道有原反補會看不懂結果
B:有符號資料表示法的幾種方式
原碼
就是二進位制定點表示法,即最高位為符號位,“0”表示正,“1”表示負,其餘位表示數值的大小。
通過一個位元組,也就是8個二進位制位表示+7和-7
0(符號位)0000111
1(符號位)0000111
反碼
正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。
補碼
正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1。
2.8 原碼反碼補碼練習
A:已知原碼求補碼(加一取反)
0b10110100
0b11001100
B:已知補碼求原碼
0b11101110 (減1取反)
ob10010010
2.9 變數的概述及格式
A:什麼是變數
在程式執行的過程中,在某個範圍內其值可以發生改變的量(ex:數學的未知數)
B:變數的定義格式
資料型別 變數名 = 變數值;
C:為什麼要定義變數
用來不斷的存放同一型別的常量,並可以重複使用
2.10 資料型別的概述及分類
A:為什麼有資料型別
Java語言是強型別語言,對於每一種資料都定義了明確的具體資料型別,在記憶體總分配了不同大小的記憶體空間
B:Java中資料型別的分類
- 基本資料型別
- 引用資料型別
- 面向物件部分講解
C:基本資料型別分類(4類8種)
2.11 定義不同資料型別的變數
public class Demo1_DataType { //DataType資料型別
public static void main(String args[]) {
//整數型別
byte b=10; //佔一個位元組,-128-127
short s=20; //佔兩個位元組
int i=30; //佔四個位元組,整數預設的資料型別就是int型
long x=8888888888L;//佔8個位元組,如果long型別後面加L進行標識,組好加大L,因為小L太像1了。
System.out.println(b);
System.out.println(s);
System.out.println(i);
System.out.println(x);
//浮點型別
float f=12.3f;//佔4個位元組,
double d=33.4;//佔8個位元組,小數預設的資料型別是double型別
System.out.println(f);
System.out.println(d);
//字元型別
char c='a';//佔2個位元組
System.out.println(c);
//布林型別
boolean b1=true;
boolean b2=false;
System.out.println(b1);
System.out.println(b2);
}
}
2.12 使用變數的注意事項
A:案例演示
a:作用域問題
同一個區域不能使用相同的變數名
b:初始化值問題
區域性變數在使用之前必須賦值
c:一條語句可以定義幾個變數
int a,b,c…;
2.13 資料型別轉換之隱式轉換
A:案例演示
a:int + int
b:byte + int 的結果分別用byte和int型別接收,看效果
B:Java中的預設轉換規則
由於java中整型的資料預設是int型別,因此 short btye型別的資料和int型別的進行運算的時候,會被自動提升稱為int型別。
int和long等更高精度的資料運算時,會提升成為long等更高精度的資料型別,為了確保精度。
//資料型別轉換之隱式轉換
int x=3;
byte b=4;
x=x+b;
System.out.println(x);
2.14 資料型別轉換之強制型別轉換
A:強制轉換問題
int a = 10;
byte b = 20;
b = a + b;
B:強制轉換的格式
b = (byte)(a + b);
C:強制轉換的注意事項
如果超出了被賦值的資料型別的取值範圍得到的結果會與你期望的結果不同
byte b=(byte)(126+4);
System.out.println(b);//-126
2.15 變數相加和常量相加的區別
A:案例演示
面試題:看下面的程式是否有問題,如果有問題,請指出並說明理由。
byte b1 = 3;
byte b2 = 4;
byte b3 = b1 + b2;(報錯)
從兩方面去回答這個題
b1和b2是兩個變數,變數裡面儲存的值都是變化的,所以在程式執行中JVM是無法判斷裡面具體的值
byte型別的變數在進行運算的時候,會自動型別提升為int型別 ,所相當於把一個int的值給了byte,編譯報錯
byte b4 = 3 + 4;(沒問題)
3和4都是常量,java有常量優化機制,就是在編譯的的時候直接把3和4的結果賦值給b4了
2.16 long和float的取值範圍誰大誰小
進行混合運算的時候,byte,short,char不會相互轉換,都會自動型別提升為int型別,其他型別進行混合運算的是小的資料型別提升為大的
byte,short,char – int – long – float – double
long: 8個位元組
float:4個位元組
4個位元組是32個二進位制位
1位是符號位 1是負數,0是正數
23位是尾數位(無限接近1)
A:它們底層的儲存結構不同。
B:float表示的資料範圍比long的範圍要大
long:2^63-1
float:3.410^38 > 210^38 > 28^38 = 22^3^38 = 2*2^114 > 2^63-1
2.17 字元和字串的參與運算
A.System.out.println('a'+1);//98,因為有ascii碼錶,a字元對應的是ascll的97
B:ASCII碼錶概述
System.out.println(“hello”+’a’+1);//輸出:helloa1 任何資料用+與字串連線最後都會產生新的字串
System.out.println(‘a’+1+”hello”);//輸出: 98 hello
D:+在有字串參與中被稱為字串連線符
System.out.println(“5+5=”+5+5);//輸出 5+5=55
System.out.println(5+5+”=5+5”);//輸出:10=5+5
2.18 char資料型別
A:char c = 97;
B:Java語言中的字元char可以儲存一箇中文漢字嗎?為什麼呢?
可以。因為Java語言採用的是Unicode編碼。Unicode編碼中的每個字元佔用兩個位元組。
所以,Java中的字元可以儲存一箇中文漢字
2.19 算術運算子的基本用法
A:什麼是算術運算子
對常量和變數法進行操作的符號
B:運算子的分類
算術運算子,賦值運算子,比較(關係或條件)運算子,邏輯運算子,位運算子,三目(元)運算子
C:算術運算子有哪些
System.ou.println(10/3);//整數相除結果只能是整數
System.ou.println(10/3.0);//如果想得到小數,把其中一個數變成小數
取模運算就是取餘數
System.out.println(12 % 5);
如果左邊絕對值小於右邊就是本身
System.out.println(-3 % 5);
如果左邊絕對值是右邊的倍數時,結果為0
System.out.println(-10 % 5);
如果左邊的絕對值大於右邊,結果是餘數,符號取決於左邊,右邊忽略不計
System.out.println(13 % -5);
一個數模與2結果要麼是0,要麼是1,可以用來切換條件
2.20 算術運算子++和—的用法
A:++,––運算子的作用
++:自加。對原有的資料進行+1
- –:自減。對原有的資料進行-1
a:單獨使用:
放在運算元的前面和後面效果一樣。(這種用法是我們比較常見的)
b:參與運算使用:
放在運算元的前面,先自增或者自減,然後再參與運算。
放在運算元的後面,先參與運算,再自增或者自減。
int a = 4;
a++; a++ 相當於a = a+1
//如果++符號放在變數的後面,是先賦值,再自加
int b = a++;
//無論賦值,還是運算,還是列印都是先將變數裡的值拿出來,然後在自身+1
//System.out.println("b = " + b);
System.out.println(a++);//輸出4
System.out.println(a);*///輸出 5
2.21 賦值運算子的基本用法
a:基本的賦值運算子:=
把=右邊的資料賦值給左邊。
b:擴充套件的賦值運算子:+=,-=,*=,/=,%=
+= 把左邊和右邊做加法,然後賦值給左邊。
Int a=3;//把右邊的常量值賦值給左邊的變數,左邊必須是變數
2.22 關係運算符的基本用法及其注意事項
A.關係運算符有哪些(比較運算子,條件運算子)
==,!=,>,>=,<,<=
注意事項:無論你的操作是簡單海曙複雜,結果是boolean型別
“==”不能寫成“=”