四莽龟、常量
4.1 概述:
-在程序執(zhí)行的過程中其值不可以發(fā)生改變
4.2 分類:
-字面值常量
字符串常量
整數(shù)常量:Java對整數(shù)常量提供了4中表現(xiàn)形式(二邓萨、八地梨、十、十六進(jìn)制)先誉;
小數(shù)常量
字符常量
布爾常量
空常量
4.3 關(guān)于進(jìn)制:
4.3.1 概述:
-就是進(jìn)位制湿刽,是人們規(guī)定的一種進(jìn)位方法。
-規(guī)則:X進(jìn)制褐耳,則表示逢X進(jìn)一位;
計(jì)算機(jī)的電子元件的狀態(tài):開關(guān)
僅僅開關(guān)兩個(gè)狀態(tài)是不夠表達(dá)我們常見的數(shù)據(jù)的:英文字母渴庆,數(shù)字铃芦,標(biāo)點(diǎn)符號等。為了能便是更多的數(shù)據(jù)襟雷,國際化組織就規(guī)定:用8個(gè)這樣的信號(開關(guān))來表示一個(gè)數(shù)據(jù)刃滓,這個(gè)數(shù)據(jù)單位叫:字節(jié)。
后來耸弄,通過數(shù)字1咧虎,0來表示開和關(guān);那么1個(gè)字節(jié) 等于有8位(bit)计呈。
由這樣的1砰诵,0組成的數(shù)據(jù)就是二進(jìn)制數(shù)據(jù);
單位轉(zhuǎn)換:
1byte = 8bit
1k = 1024byte
1m = 1024k
1g = 1024g
1t = 1024g
4.3.2表現(xiàn)形式:
二進(jìn)制:有這樣的1捌显,0組成的數(shù)據(jù)就是二進(jìn)制茁彭。以0b開頭。
八進(jìn)制:Octal扶歪,縮寫OCT或O理肺,一種以8為基數(shù)的計(jì)數(shù)法,采用0善镰,1妹萨,2,3炫欺,4乎完,5,6竣稽,7八個(gè)數(shù)字囱怕,逢八進(jìn)1霍弹。以0開頭
十進(jìn)制:由0,1娃弓,2...9組成典格。整數(shù)默認(rèn)是十進(jìn)制。
十六進(jìn)制:它由0-9台丛,A-F組成耍缴,字母不區(qū)分大小寫。與10進(jìn)制的對應(yīng)關(guān)系是:0-9對應(yīng)0-9挽霉;A-F對應(yīng)10-15防嗡;N進(jìn)制的數(shù)可以用0~(N-1)的數(shù)表示,超過9的用字母A-F侠坎。以0x開頭
4.3.3相互轉(zhuǎn)換:
1)二進(jìn)制轉(zhuǎn)化成八進(jìn)制
-A.把二進(jìn)制的數(shù)據(jù)蚁趁,從右開始,每三位一組合实胸,最左邊不夠的時(shí)候補(bǔ)0他嫡。
-B.分別計(jì)算出對應(yīng)的十進(jìn)制數(shù)值,
-C.再把每個(gè)十進(jìn)制的數(shù)據(jù)組合起來庐完,就是一個(gè)八進(jìn)制钢属。
2)二進(jìn)制轉(zhuǎn)化成十六進(jìn)制
-A.把二進(jìn)制的數(shù)據(jù),從右開始门躯,每四位一組合淆党,最左邊不夠的時(shí)候補(bǔ)0。
-B.分別計(jì)算出對應(yīng)的十進(jìn)制數(shù)值讶凉,
-C.再把每個(gè)十進(jìn)制的數(shù)據(jù)組合起來染乌,就是一個(gè)十六進(jìn)制。
3)任意進(jìn)制轉(zhuǎn)化為十進(jìn)制
按權(quán)求和:
系數(shù):每一個(gè)位上的數(shù)據(jù)值本身就是系數(shù)缀遍。
基數(shù):x進(jìn)制的基數(shù)就是x
權(quán):針對每一個(gè)位上的數(shù)據(jù)進(jìn)行編號慕匠,從右邊并且是從0開始編號,這個(gè)編號就是該位上數(shù)據(jù)的權(quán)值
x進(jìn)制轉(zhuǎn)化成十進(jìn)制:每一個(gè)位上的系數(shù)*基數(shù)的權(quán)次冪 之和域醇。
十進(jìn)制轉(zhuǎn)化十進(jìn)制台谊,推導(dǎo)出規(guī)律
按權(quán)求和的推導(dǎo)
4)十進(jìn)制他轉(zhuǎn)化其他進(jìn)制
除基取余,直到商為0譬挚,余數(shù)反轉(zhuǎn)锅铅;
52轉(zhuǎn)二進(jìn)制:0b110100
52 / 2 = 26 余0
26 / 2 = 13 余0
13 / 2 = 6 余1
6 / 2 = 3 余0
3 / 2 = 1 余1
1 / 2 = 0 余1
52轉(zhuǎn)八進(jìn)制:064
52 / 8 = 6 余4
6 / 8 =0 余6
52轉(zhuǎn)十六進(jìn)制:0x34
52 / 16 = 3 余4
3 / 16 = 0 余3
5)任意的x進(jìn)制到y(tǒng)進(jìn)制的轉(zhuǎn)換?
以十進(jìn)制為橋梁:
x進(jìn)制 轉(zhuǎn) 十進(jìn)制
十進(jìn)制 轉(zhuǎn) y進(jìn)制
6)二進(jìn)制與十進(jìn)制之間的快速轉(zhuǎn)換法:8421碼
(一知半解减宣,暫不考慮)
4.4 有符號的數(shù)據(jù)表示法:
4.4.1 概述:
-在計(jì)算機(jī)內(nèi)盐须,有符號數(shù)據(jù)的表示法:原碼、反碼漆腌、補(bǔ)碼贼邓。
-所有數(shù)據(jù)的運(yùn)算都是采用數(shù)據(jù)對應(yīng)的二進(jìn)制的補(bǔ)碼進(jìn)行的阶冈。
4.4.2 原碼、反碼塑径、補(bǔ)碼:
原碼统舀、反碼匆骗、補(bǔ)碼練習(xí):
五、變量
5.1 概述:
-在程序執(zhí)行過程中誉简,在某個(gè)范圍內(nèi)變化的量
-可以理解成變量就是在內(nèi)存中的一小塊區(qū)域碉就,使用變量名來訪問這一塊區(qū)域,區(qū)域中的內(nèi)容就是變量的值闷串;
5.2 格式:
數(shù)據(jù)類型 變量名 = 初始化值瓮钥;此格式是固定的;
5.3 關(guān)于數(shù)據(jù)類型
5.3.1 概述:
Java是強(qiáng)類型語言窿克,對于每一種數(shù)據(jù)都定義了明確的具體數(shù)據(jù)類型骏庸,在內(nèi)存中分配了不同的大小的內(nèi)存空間。
5.3.2 注意事項(xiàng):
A.整數(shù)類型默認(rèn)值是int年叮,浮點(diǎn)類型默認(rèn)是double。(在運(yùn)算是會(huì)把byte轉(zhuǎn)換成int再運(yùn)算)
B.聲明long類型時(shí)玻募,后面要加上“L”或者"l";
C.聲明float類型只损,后加“F”或"f",否則可能損失精度七咧,因浮點(diǎn)數(shù)據(jù)默認(rèn)是double的跃惫。
D.默認(rèn)轉(zhuǎn)換:1)byte,short,char--int--long--float--double(從小字節(jié)轉(zhuǎn)到大字節(jié),避免可能損失精度)
2)byte,short,char之間不能相互轉(zhuǎn)換艾栋,他們參與運(yùn)算首先轉(zhuǎn)成int類型爆存;
練習(xí):
char在轉(zhuǎn)化int類型時(shí)對應(yīng)一張ASCII表,其中有3個(gè)關(guān)健對應(yīng)值須記住
'0'-----48
'A'-----65
'a'-----97
衍生:當(dāng)字符串+其他類型時(shí)
字符串+其他類型
E.強(qiáng)制轉(zhuǎn)換:目標(biāo)類型 變量名 = (目標(biāo)類型)(被轉(zhuǎn)換的數(shù)據(jù))
F.運(yùn)算時(shí)直接是常量想加蝗砾,查看注意A中的圖的解釋
5.3.3 練習(xí)
5.4 使用變量的主意事項(xiàng):
A.作用域:變量定義的位置決定了他的作用域先较,定義在方法內(nèi),作用域就是這個(gè)方法體悼粮,定義在類中作用域就是這個(gè)類闲勺。相同的作用域中不能丁兩個(gè)同名變量。
B.初始化值:沒有初始化值不能直接使用扣猫。
C.在一行上建議之定義一個(gè)變量菜循。可以多個(gè)不算錯(cuò)申尤,書寫不規(guī)范癌幕。
5.5 思考:
1.變量相加和常量相加的區(qū)別衙耕?答案:注意A與F
2.強(qiáng)制轉(zhuǎn)換數(shù)據(jù)移除后的結(jié)果怎么算?答案:練習(xí)
byte,short他們接收的其實(shí)是int類型的值勺远,它們會(huì)自己做一個(gè)檢測橙喘,如果超出他們所能表達(dá)的數(shù)值范圍則就報(bào)錯(cuò)了。byte b = 128;//就報(bào)錯(cuò)谚中。
byte臨界值的問題(-128~127)
byte b1 = 127;//無錯(cuò)
byte b2 = 128;//打印出來的是-128
byte b3 = 129;//打印出來的是-127
byte b4 = 130;//打印出來的是-126
128的二進(jìn)制是10000000渴杆,-128的二進(jìn)制也可以是:10000000(這個(gè)的1既是符號位也是數(shù)值位),其他類型的臨界值也是這樣的宪塔;
數(shù)據(jù)類型的默認(rèn)轉(zhuǎn)換:
byte 磁奖、char、short --int -- long --float --double
其中l(wèi)ong是8字節(jié)某筐,而float是4字節(jié)比搭,為什么long還能默認(rèn)轉(zhuǎn)成float呢?
A.long與float的底層存儲結(jié)構(gòu)不同
1) long是整數(shù)類型南誊,直接是1身诺,08位那么存儲;
2) float是浮點(diǎn)類型抄囚,是帶小數(shù)的二進(jìn)制換算霉赡,存儲的是有效數(shù)字位(科學(xué)計(jì)數(shù)法)
B.float所表示的數(shù)值范圍要大于long類型所表示的數(shù)值范圍的;
1) long表示的數(shù)值范圍:2^63-1
2) float表示的數(shù)值范圍:3.410^38
3.410^38 > 210^38 > 28^38 > 22338 = 22^114 > 2^63-1
Java語言中的字符char可以存儲漢字嗎幔托?
可以的穴亏,因?yàn)镴ava中的char是2個(gè)字節(jié)的;一個(gè)漢字是占2個(gè)字節(jié)的重挑;Java的編碼是采用Unicode編碼嗓化;
float類型的數(shù)據(jù)在內(nèi)存中是怎么存儲的?(了解)
SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
S表示浮點(diǎn)數(shù)正負(fù)
E指數(shù)加上127后的值得二進(jìn)制數(shù)據(jù)
M底數(shù)
舉例:17.625在內(nèi)存中的存儲
首先要把17.625換算成二進(jìn)制:10001.101
整數(shù)部分谬哀,除以2刺覆,直到商為0,余數(shù)反轉(zhuǎn)史煎。
小數(shù)部分谦屑,乘以2,直到乘位0劲室,進(jìn)位順序取伦仍。
在將10001.101右移,直到小數(shù)點(diǎn)前只剩1位:
1.0001101 * 2^4 因?yàn)橛乙苿?dòng)了四位
這個(gè)時(shí)候很洋,我們的底數(shù)和指數(shù)就出來了
底數(shù):因?yàn)樾?shù)點(diǎn)前必為1充蓝,所以IEEE規(guī)定只記錄小數(shù)點(diǎn)后的就好。所以,此處的底數(shù)為:0001101
指數(shù):實(shí)際為4谓苟,必須加上127(轉(zhuǎn)出的時(shí)候官脓,減去127),所以為131涝焙。也就是10000011
符號部分是整數(shù)卑笨,所以是0
綜上所述,17.625在內(nèi)存中的存儲格式是:
01000001 10001101 00000000 00000000
參考書籍視頻:
-學(xué)習(xí)視頻:黑馬程序員_Java基礎(chǔ)視頻-深入淺出精華版
-閱讀書籍:Java核心技術(shù) 卷I(機(jī)械工業(yè)出版社)
API1.8