计算机的世界:[-bit之魂-]
這里就是這樣的世界,這里的1 + 1 = 10 --二進(jìn)制物語(yǔ)
儒仁慈世安家業(yè),墨守規(guī)矩自方圓。 兵戈鐵馬平天下,法理束欲定千秋。 佛釋惡業(yè)普渡生,道化萬(wàn)物共長(zhǎng)存。 諸子百家何為首? 且問(wèn)君心何所求。---- 張風(fēng)捷特烈《求》 2019.2.15 復(fù)制代碼零、前言
關(guān)于數(shù)字化個(gè)人認(rèn)為是計(jì)算機(jī)世界對(duì)現(xiàn)實(shí)世界的映射(或稱采樣或模擬)。
現(xiàn)實(shí)世界包括客觀存在和人類(lèi)文明衍生物(自然科學(xué)和廣義文學(xué))。
數(shù)字化就是將這些映射為二進(jìn)制數(shù)據(jù)。本文觀點(diǎn)為個(gè)人體悟總結(jié),僅供參考
本文包括
1.散扯引入一些概念和個(gè)人體悟 2.進(jìn)制及其轉(zhuǎn)化的相關(guān)問(wèn)題 3.邏輯運(yùn)算 4.字符的編解碼 5.java中的基本數(shù)據(jù)類(lèi)型 復(fù)制代碼一、先天八卦與烽火狼煙
先聲明我不是尊學(xué)崇術(shù)的人,百家于我如一。
道家認(rèn)為萬(wàn)物皆有陰陽(yáng),這跟計(jì)算機(jī)世界一切皆有0,1一樣。
| 生存空間 | 地球 | 計(jì)算機(jī)系統(tǒng)(手機(jī)、電腦及智能終端) |
| 資源 | 地球提供 | 計(jì)算機(jī)系統(tǒng)提供 |
| 食物 | 可消化的能量體 | 可處理的數(shù)據(jù)體 |
| 消化 | 原生食物-->可用能量 | 原生數(shù)據(jù)-->可用數(shù)據(jù) |
| 廢物 | shi(化驗(yàn)看健康狀況) | log (分析看健康狀況) |
| 行為 | 唱歌,做作業(yè),看小說(shuō)... | 播放音樂(lè),放視屏,顯示小說(shuō)... |
| 外觀 | 化妝,換發(fā)型,換衣服... | 美化UI,齊劉海?,換膚... |
| 收藏品 | 古董,金錢(qián),武器... | 緩存文件cache |
| 誕生 | 父母 | Coder |
| 家族優(yōu)勢(shì) | 富二代?(金錢(qián)支持) | 大佬公司的新產(chǎn)品(技術(shù)支持) |
| 生態(tài)群 | 娛樂(lè)圈, 教育界,學(xué)生黨... | 播放相關(guān),教育相關(guān),游戲類(lèi)... |
| 最廣闊存在 | 無(wú)限空間(宇宙) | 無(wú)限內(nèi)存(不可描述) |
| 最底層表現(xiàn)形式 | 不可描述(元素/分子?) | 0 和 1 |
1、先天八卦 (-吹牛的絕佳資本-)
道有言:易生太極,太極生兩儀,兩儀生四象,四象生八卦 。
先天八卦還是蠻好玩的,至于洛書(shū)和河圖的九宮和后天八卦...
當(dāng)把陰(斷橫)看做0,陽(yáng)(連橫)看做 1,自下而上來(lái)表示
看過(guò)俠嵐的應(yīng)該比較熟悉(我都忍不住說(shuō)絕招了...)
在八卦之上再添加陰陽(yáng)變化,就形成64卦,如果萬(wàn)物都由陰陽(yáng)生成
那么我們的世界也是二進(jìn)制的變化?細(xì)思恐極...
這里并不是故弄玄虛,只是想說(shuō)明一下二進(jìn)制的變化力
2.烽火狼煙
小學(xué)的那道題印象深刻(具體數(shù)據(jù)當(dāng)然記不清了):
一個(gè)城池邊防有六座烽火臺(tái),通過(guò)狼煙來(lái)通知軍隊(duì)敵軍人數(shù), 以二進(jìn)制表示:點(diǎn)煙的代表1,沒(méi)點(diǎn)的代表0 ,化成十進(jìn)制后的1000倍即是敵軍人數(shù) 下面敵軍來(lái)了多少人?110010 = 2^5+2^4+2^1=32+16+2=50 答:來(lái)了50000人 復(fù)制代碼這就有意思,來(lái)了50000人我總不能在天上寫(xiě)個(gè)50000吧,
兩種狀態(tài)和六個(gè)變化點(diǎn),再結(jié)合狀態(tài)獲取的途徑,烽火狼煙確實(shí)實(shí)現(xiàn)了信息的傳遞
但功勞是烽火狼煙嗎,是二進(jìn)制嗎? 烽火狼煙只是途徑,而二進(jìn)制只是規(guī)則。
說(shuō)了那么多,想表達(dá)一點(diǎn):變化可以附加信息
二、進(jìn)制相關(guān)
1.我與二進(jìn)制
小學(xué)看二進(jìn)制,不是1就是0唄,我蒙一下還有一半概率! 中學(xué)看二進(jìn)制,覺(jué)得有點(diǎn)意思,不是1就是0,誰(shuí)想出來(lái)的,這么無(wú)聊! 高學(xué)看二進(jìn)制,面無(wú)表情...二進(jìn)制就二進(jìn)制唄,管我甚事,反正我會(huì)算! 大學(xué)看二進(jìn)制,不聽(tīng)不聽(tīng),王八念經(jīng)...! 現(xiàn)在看二進(jìn)制,擦,哲學(xué)啊! 復(fù)制代碼2.狀態(tài)與變化點(diǎn)
一種機(jī)制的變化總和=狀態(tài)的變化點(diǎn)次方
道家: 狀態(tài):陰陽(yáng) 變化點(diǎn):爻 如八卦是陰陽(yáng)的三種變化,稱為三爻 , 兩儀即 二爻計(jì)算機(jī): 狀態(tài):0 , 1 (高電平1和低電平0) 變化點(diǎn):位 如一個(gè)int是0,1的32種變化,稱為32位,boolean即 1位(真假)|--為什么狀態(tài)和變化這么重要? 拿烽火狼煙來(lái)說(shuō),能用十進(jìn)制嗎? 答案:能 ! 只要規(guī)則定制完善即可,比如九種顏色的煙代表1~9,0代表不點(diǎn) 這樣就能形成10種狀態(tài),也就是十進(jìn)制,6座烽火臺(tái)可以表示0~999999中的任意一個(gè) 但是成本太高,可行性也很低;點(diǎn)與不點(diǎn)是兩種天然的狀態(tài),干嘛非要瞎折騰 111111 最大表示 63(即2^6-1) 這和 999999(即10^6-1),兩者的信息量差距還是非常大的 復(fù)制代碼3.為什么計(jì)算機(jī)非要用二進(jìn)制
天時(shí)-地利-人和
天時(shí):電氣時(shí)代的來(lái)臨,人類(lèi)掌握了電的使用,機(jī)械和電力結(jié)合的歷史洪流 地利:二進(jìn)制的物理可實(shí)現(xiàn)(高低電平)、邏輯運(yùn)算能力、結(jié)構(gòu)與運(yùn)算規(guī)則簡(jiǎn)單 人和:人才輩出,各個(gè)學(xué)科都誕生出一批大師,學(xué)術(shù)氛圍...二進(jìn)制加法:0+0=0 1+0=1 0+1=1 1+1=10 天然與 二進(jìn)制乘法:0*0=0 1*0=0 0*1=0 1*1=1 天然或 復(fù)制代碼4、進(jìn)制轉(zhuǎn)化
這里我提個(gè)問(wèn)題,來(lái)想一下:
是不是所有的十進(jìn)制實(shí)數(shù)都能轉(zhuǎn)化成二進(jìn)制?
是不是所有的其他進(jìn)制實(shí)數(shù)都能轉(zhuǎn)化成十進(jìn)制?
4.1.其他進(jìn)制轉(zhuǎn)化為10進(jìn)制
一氣化三清,公式走起
R:基數(shù)(進(jìn)制) i:數(shù)字的位置 權(quán):R的i次方 n:整數(shù)位數(shù)-1 m:小數(shù)位數(shù)------------------345.6 十進(jìn)制 ---------------------------3 4 5 6↓ ↓ ↓ ↓ 3*10^2 + 4*10^1 + 5*10^0 + 6*10^-1 300 + 40 + 5 + 0.6 = 345.6基數(shù) R=10; n=2; m=1 對(duì)于3而言:i=2 權(quán):10^2 K=3 對(duì)于4而言:i=1 權(quán):10^1 K=4 對(duì)于5而言:i=0 權(quán):10^1 K=5 對(duì)于5而言:i=-1 權(quán):10^-1 K=6------------------345.6八進(jìn)制轉(zhuǎn)10進(jìn)制 ---------------------------3 4 5 6↓ ↓ ↓ ↓ 3*8^2 + 4*8^1 + 5*8^0 + 6*8^-1 192 + 32 + 5 + 0.75 = 229.75基數(shù) R=8; n=2; m=1 對(duì)于3而言:i=2 權(quán):8^2 K=3 對(duì)于4而言:i=1 權(quán):8^1 K=4 對(duì)于5而言:i=0 權(quán):8^1 K=5 對(duì)于5而言:i=-1 權(quán):8^-1 K=6---------------11001.1二進(jìn)制轉(zhuǎn)10進(jìn)制 --------------------------1 1 0 0 1 1 ↓ ↓ ↓ ↓ ↓ ↓ 1*2^4 + 1*2^3 + 0*2^2 + 0*2^1 + 1*2^0 + 1*2^-1 16 + 8 + 0 + 0 + 1 + 0.5 = 25.5基數(shù) R=2; n=4; m=1 自左到右 對(duì)于1而言:i=4 權(quán):2^4 K=1 對(duì)于1而言:i=3 權(quán):2^3 K=1 對(duì)于0而言:i=2 權(quán):2^2 K=0 對(duì)于0而言:i=1 權(quán):2^1 K=0 對(duì)于1而言:i=0 權(quán):2^1 K=1 對(duì)于1而言:i=-1 權(quán):2^-1 K=1二進(jìn)制--->十進(jìn)制:權(quán)值相加 復(fù)制代碼4.2.十進(jìn)制轉(zhuǎn)換成二進(jìn)制
--------------十進(jìn)制49轉(zhuǎn)換二進(jìn)制----------------------- --------------------- 權(quán)值 49 / 2 = 24 ······1 2^0 = 1 24 / 2 = 12 ······0 --- 12 / 2 = 6 ······0 --- 6 / 2 = 3 ······0 --- 3 / 2 = 1 ······1 2^4 = 16 1 / 2 = 0 ······1 2^5 = 32 --倒取-->110001 :小學(xué)老師告訴我這樣轉(zhuǎn)化,到現(xiàn)在我也不明白why? 十進(jìn)制整數(shù)可以和二進(jìn)制整數(shù)一一對(duì)應(yīng),那小數(shù)呢?--------------十進(jìn)制0.8125轉(zhuǎn)換二進(jìn)制----------------------- ---------------------------- 權(quán)值 0.8125 * 2 = 1.625 1 2^-1=0.5 0.625 * 2 = 1.25 1 2^-2=0.25 0.25 * 2 = 0.5 0 --- 0.5 * 2 = 1 1 2^-4=0.0625 0 * 2 = 0 0 --- over 0.5+0.25+0.0625 = 0.8125 ---準(zhǔn)確無(wú)誤,這老師可沒(méi)教過(guò)--------------十進(jìn)制0.6531轉(zhuǎn)換二進(jìn)制----------------------- ---------------------------- 權(quán)值 0.6531 * 2 = 1.3062 1 2^-1=0.5 0.3062 * 2 = 0.6124 0 --- 0.6124 * 2 = 1.2248 1 2^-3=0.125 0.2248 * 2 = 0.4496 0 --- 0.4496 * 2 = 0.8992 0 --- 0.8992 * 2 = 1.7984 1 2^-6=0.03125 .... 無(wú)窮盡 0.5+0.125+0.03125 = 0.65625 ≈ 0.6531 這就更玄乎了...竟然無(wú)窮盡,所以這便是計(jì)算機(jī)中小數(shù)的瑕疵 復(fù)制代碼4.3.二進(jìn)制與八進(jìn)制十六進(jìn)制間的轉(zhuǎn)化
小數(shù)對(duì)二進(jìn)制來(lái)說(shuō)是個(gè)無(wú)法磨滅的瑕疵,也許有什么二進(jìn)制的無(wú)限不循環(huán)(循環(huán))小數(shù)也說(shuō)不定
我認(rèn)為數(shù)是美的,瑕疵只是我們還無(wú)法忍識(shí)的另一種美的存在形式,2,8,16完美轉(zhuǎn)化
四、計(jì)算機(jī)中數(shù)的表示
1.無(wú)符號(hào)
結(jié)合烽火狼煙,相當(dāng)于有八個(gè)烽火臺(tái),每個(gè)烽火臺(tái)有2個(gè)狀態(tài)(0,1)
能夠表示 0~ 2^8-1 個(gè)正整數(shù)
2.加入符號(hào)
對(duì)于整數(shù)而言要有符號(hào),java中的byte是帶有符號(hào)(+或-)的,于是要扣除一位
就像烽火狼煙無(wú)法表示友方來(lái)軍多少人,可以扣除一個(gè)作為友方來(lái)軍體還是敵方來(lái)軍
所以就7個(gè)烽火臺(tái)有數(shù)字價(jià)值,好處是效用增加,壞處是表示的數(shù)范圍減小
能夠表示-2^7 ~ 2^7-1 即(-128 ~ 127)個(gè)正整數(shù)
3.減法: byte 為例
計(jì)算機(jī)無(wú)法直接做減法,但是加法也可以變成減法
今天剛好發(fā)生了一件事來(lái)表述:
4.小數(shù)的表示:float為例
7.25(十進(jìn)制) = 111.01(二進(jìn)制 ) 111.01(二進(jìn)制)=1.1101*2^2(二進(jìn)制) 類(lèi)比科學(xué)計(jì)數(shù)法符號(hào)位:0 階碼:2 + 127 ---二進(jìn)制---> 10000001 尾數(shù):1101|---在java中可用以下代碼驗(yàn)證:記得補(bǔ)滿32位 float a = 7.25f; int b=Float.floatToIntBits(a); String string = Integer.toBinaryString(b); System.out.println(string); //0100 0000 1110 1000 0000 0000 0000 0000 復(fù)制代碼四、邏輯控制
1、四個(gè)位運(yùn)算符
隨便寫(xiě)了幾個(gè)值,眼都瞅花了...
位與:& 兩個(gè)都是1為1 位或:| 只要有1就是1 位非:~ 全取反 位異或:^ 兩個(gè)都不一樣為1例子:c = a & b 0000 0000 0000 0000 0000 0110 1010 1001 [a] 0x000006a9 1705& 0000 0000 0000 0000 0100 0100 1011 0101 [b] 0x000044b5 17589 --------------------------- 0000 0000 0000 0000 0000 0100 1010 0001 [c] 0x000004a1 1185例子:d = a | b0000 0000 0000 0000 0000 0110 1010 1001 [a] 0x000006a9 1705| 0000 0000 0000 0000 0100 0100 1011 0101 [b] 0x000044b5 17589 ---------------------------0000 0000 0000 0000 0100 0110 1011 1101 [d] 0x000046bd 18109例子:e = ~a 0000 0000 0000 0000 0000 0110 1010 1001 [a] 0x000006a9 1705~ 1111 1111 1111 1111 1111 1001 0101 0110 [e] 0xfffff956 -1706例子:f = a ^ b0000 0000 0000 0000 0000 0110 1010 1001 [a] 0x000006a9 1705^ 0000 0000 0000 0000 0100 0100 1011 0101 [b] 0x000044b5 17589 ---------------------------0000 0000 0000 0000 0100 0010 0001 1100 [f] 0x0000421c 16924 復(fù)制代碼2.java中校驗(yàn)上面位運(yùn)算的例子
public static void main(String[] args) {int a = 0x000006a9;//0000 0000 0000 0000 0000 0110 1010 1001int b = 0x000044b5;//0000 0000 0000 0000 0100 0100 1011 0101int c = 0x000004a1;//0000 0000 0000 0000 0000 0100 1010 0001int d = 0x000046bd;//0000 0000 0000 0000 0100 0110 1011 1101int e = 0xfffff956;//1111 1111 1111 1111 1111 1001 0101 0110int f = 0x0000421c;//1111 1111 1111 1111 1111 1001 0101 0110System.out.println(a);//1705System.out.println(b);//17589//位與System.out.println(a & b);//1185System.out.println(c);//1185//位或System.out.println(a | b);//18109System.out.println(d);//18109//位非System.out.println(e);//-1706System.out.println(~a);//-1706//位異或System.out.println(f);//-1706System.out.println(a ^ b);//-1706 } 復(fù)制代碼3.移位操作
左移n位相當(dāng)于乘以2的n次方 a<<n
右移n位:a>>n
4.需要注意的幾種套路:
1.將兩個(gè)int值得低八位(最后一個(gè)字節(jié))拼成一個(gè)short取低8位: int 值 & 0x000000FF ----看一下挺好理解的0000 0000 0000 0000 0000 0110 1010 1001 [a] 0x000006a9 1705 & 0000 0000 0000 0000 0000 0000 1111 1111 -------------------------------------------------0000 0000 0000 0000 0000 0000 1010 1001 [i] 0x000000a9取低8位后左移8位: int 值 & 0x000000FF0000 0000 0000 0000 0100 0100 1011 0101 [b] 0x000044b5 17589 & 0000 0000 0000 0000 0000 0000 1111 1111 -------------------------------------------------0000 0000 0000 0000 0000 0000 1011 0101 [j] 0x000000b50000 0000 0000 0000 1011 0101 0000 0000 [j] 左移8位 0x0000b5000000 0000 0000 0000 0000 0000 1010 1001 [i] 0x000000a9+ 0000 0000 0000 0000 1011 0101 0000 0000 [j] 0x0000b500-------------------------------------------------0000 0000 0000 0000 1011 0101 1010 1001 0x0000b5a9強(qiáng)轉(zhuǎn)成short完成任務(wù):1011 0101 1010 1001 2.當(dāng) n = 2^i 時(shí),x % n = (n - 1) & x (這是看HashMap源碼學(xué)到的),例如: 至于原理沒(méi)研究過(guò),但位運(yùn)算要比%運(yùn)算要快,所以后者有優(yōu)勢(shì),HashMap里便是后者 int x = 67444; int i1 = 255 & x;//===>67444 % 255 int i2 = x % 256;//===>67444 % 256 System.out.println(i1);//166 System.out.println(i2);//166 復(fù)制代碼五、字符編碼
你有沒(méi)有想過(guò)這樣一個(gè)問(wèn)題?
計(jì)算機(jī)文件存儲(chǔ)的基礎(chǔ)是字節(jié),為什么一個(gè)字節(jié)(byte)是8位
1.ASCII碼
這是我能找到最清楚的ASCII碼表了,以后有時(shí)間自己畫(huà)一幅(已加入TODO事項(xiàng))
ASCII碼中字符和控制字符一共有128種,即2^7,用7個(gè)二進(jìn)制便可以映射
類(lèi)比烽火狼煙,由變化映射出數(shù)字。這里映射出字符,理念是一致的,即用變化承載信息
標(biāo)準(zhǔn)ASCII碼使用了七位,但會(huì)預(yù)留一位作為校驗(yàn)位
IBM對(duì)ASCII碼進(jìn)行了擴(kuò)充,攻256個(gè)字符,屬于擴(kuò)展ASCII碼(非標(biāo)準(zhǔn))
2.漢字(及其他語(yǔ)言字符)的編碼
符號(hào)型的文字,如漢字、日文、韓文這就復(fù)雜了:一多,二雜,三歧義
7個(gè)字節(jié)128個(gè)空間肯定不夠用,那就增加變化唄,再來(lái)8個(gè)字節(jié)
Unicode使用兩個(gè)字節(jié)即16位來(lái)映射字符,一共2^16種,即65 536
然后發(fā)現(xiàn)還是不怎么夠用,再擴(kuò)充? 然后UTF-32
這下肯定夠了容量 4 294 967 296 個(gè),但是也太浪費(fèi)了吧!
我要裝個(gè)a,用128的籃字就行了,你給我個(gè)能裝42億的籃子?受寵若驚...
于是UTF-8閃亮登場(chǎng)
ASCII 碼表:美國(guó)標(biāo)準(zhǔn)信息交換碼 1字節(jié)--使用:7位 ISO8859-1:拉丁碼表。歐洲碼表 1字節(jié)--使用:8位 GB2312:中國(guó)的中文編碼表。 2字節(jié)--使用:16位 GBK:GB2312升級(jí)版,增加中文 2字節(jié)--使用:16位 Unicode:國(guó)際標(biāo)準(zhǔn)碼 2字節(jié)--使用:16位 UTF-8:Unicode升級(jí)版 能用1個(gè)字符表示用1個(gè)字符,不然用2個(gè),要還是不夠用,使用3個(gè)字節(jié) 復(fù)制代碼3.指定編碼表寫(xiě)出文件
public class 編碼表測(cè)試 {public static void main(String[] args) throws IOException {OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("UTF-8.txt"),"utf-8");OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("GBK.txt"),"gbk");osw.write("張風(fēng)toly");osw.close();} } 復(fù)制代碼4.計(jì)算機(jī)怎么識(shí)別張字的
將張這個(gè)字符串用utf-8編碼轉(zhuǎn)化為字節(jié)數(shù)組,可看到是[-27, -68, -96]三個(gè)數(shù)
這三個(gè)數(shù)又代表什么?
用計(jì)算器查看十進(jìn)制數(shù)的字節(jié)型的二進(jìn)制,可以看到:
5.使用不同碼表讀取測(cè)試
InputStreamReader isr_GBK_gbk = new InputStreamReader(new FileInputStream("GBK.txt"),"gbk"); char[] buf = new char[10]; int len = isr_GBK_gbk.read(buf); System.out.println(new String(buf, 0, len));//張風(fēng)tolyInputStreamReader isr_GBK_utf8 = new InputStreamReader(new FileInputStream("GBK.txt"),"utf-8"); char[] buf2 = new char[10]; int len2 = isr_GBK_utf8.read(buf2); System.out.println(new String(buf2, 0, len2));//�?�tolyInputStreamReader isr_UTF8_utf8 = new InputStreamReader(new FileInputStream("UTF-8.txt"),"utf-8"); char[] buf4 = new char[10]; int len4 = isr_UTF8_utf8.read(buf4); System.out.println(new String(buf4, 0, len4));//張風(fēng)tolyInputStreamReader isr_UTF8_gbk = new InputStreamReader(new FileInputStream("UTF-8.txt"),"gbk"); char[] buf3 = new char[10]; int len3 = isr_UTF8_gbk.read(buf3); System.out.println(new String(buf3, 0, len3));//寮犻toly 復(fù)制代碼6.位bit與字節(jié)byte
位是計(jì)算機(jī)的基石,字節(jié)是文件的基石
如果說(shuō)位是0,1的陰陽(yáng)變化?, 字節(jié)便是256卦象,而這256卦象便是文件的最小單元
256卦象是多少爻呢 ? 8 ,也就是 8 個(gè)位來(lái)記錄這256種變化
所有文件都是以字節(jié)為單位的,你見(jiàn)過(guò)哪里有10000.5字節(jié)嗎?
7.形象體感一下字節(jié)的存在
就拿我頭像來(lái)看看吧,1,153,744 字節(jié) 115萬(wàn)多字節(jié)?! 也就是920萬(wàn)多位
也就是說(shuō)要近一億個(gè)烽火臺(tái)才能表達(dá)出這張圖片的信息?
六、再來(lái)看java的幾種數(shù)據(jù)類(lèi)型
1.八仙一覽
經(jīng)過(guò)上面走一遭,是不是感覺(jué)更熟悉了?
boolean 布爾類(lèi)型 1字節(jié) byte 字節(jié) 1字節(jié)、有符號(hào) char 字符型 2個(gè)字節(jié)、無(wú)符號(hào)、Unicode字符兼整數(shù) short 短整型 2個(gè)字節(jié)、有符號(hào)、整數(shù) int 整型 4個(gè)字節(jié)、有符號(hào)、整數(shù) long 長(zhǎng)整型 8個(gè)字節(jié)、有符號(hào)、整數(shù) float 浮點(diǎn)型 4個(gè)字節(jié)、有符號(hào)、小數(shù) 符號(hào)位:1bit,階碼:8bit, 尾數(shù):23bit double 雙精度浮點(diǎn) 8個(gè)字節(jié)、有符號(hào)、小數(shù) 符號(hào)位:1bit,階碼:11bit,尾數(shù):52bit 復(fù)制代碼2.拋張表
| boolean | 1 | 8 | true/false | false |
| byte | 1 | 8 | -2^7 ~ 2^7-1 (-128 ~ 127) | 0 |
| char | 2 | 16 | 0 ~ 2^16-1(0 ~ 65535) | null |
| short | 2 | 16 | -2^15 ~ 2^15-1 (-32768~32717) | 0 |
| int | 4 | 32 | -2^31 ~ 2^31-1 (-2147483648~2147483647) | 0 |
| long | 8 | 64 | -2^63 ~ 2^63-1 | 0L |
| float | 4 | 32 | ±1.4E-45 ~ ±3.4028235E38 | 0.0f |
| double | 8 | 64 | ±4.9E-324 ~ ±1.7976931348623157E308 | 0.0d |
3.上面給出的是用JAVA的API獲取的
難道就沒(méi)有人疑問(wèn),float的最小值? 我看到有點(diǎn)蒙,Are you sure?
|---我不淡定了 測(cè)試一下 float f = -1.5f; System.out.println(Float.MIN_VALUE > f);//true|---Float獲取最小值可能比一個(gè)float大?---->[Float.java]------------------# 看來(lái)是直接定義的常量 這就有意了---代碼注釋是最小非零整數(shù)public static final float MIN_VALUE = 0x0.000002P-126f; // 1.4e-45f|---所以嚴(yán)格說(shuō)取值范圍應(yīng)該加上±號(hào),否則不嚴(yán)謹(jǐn),網(wǎng)上基本上都是正的 復(fù)制代碼4.咱就是喜歡校驗(yàn)的人
畢竟實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn)
float f = 0.0 00000 00000 00000 00000 00000 00000 00000 00000 00001f;//Error 果然第46個(gè)0的時(shí)候報(bào)錯(cuò)了,double就沒(méi)事double d = 0.000000000000000000000000000000000000000000000000000000000000000000000000000001; 復(fù)制代碼好了,本篇沒(méi)人挺多的,如果你認(rèn)真看完,一定受益頗多
而我作為作者,受益就更加豐富了,總結(jié)一下,有些東西算是理清了
后記:捷文規(guī)范
1.本文成長(zhǎng)記錄及勘誤表
| V0.1-- | 2018-2-15 | 無(wú) |
發(fā)布名:計(jì)算機(jī)的世界:[-bit之魂-]
捷文鏈接:www.jianshu.com/p/ee74ea725…
2.更多關(guān)于我
| 張風(fēng)捷特烈 | 1981462002 | zdl1994328 |
我的github:github.com/toly1994328
我的簡(jiǎn)書(shū):www.jianshu.com/u/e4e52c116…
我的掘金:juejin.im/user/5b42c0…
個(gè)人網(wǎng)站:www.toly1994.com
3.聲明
1----本文由張風(fēng)捷特烈原創(chuàng),轉(zhuǎn)載請(qǐng)注明
2----歡迎廣大編程愛(ài)好者共同交流
3----個(gè)人能力有限,如有不正之處歡迎大家批評(píng)指證,必定虛心改正
4----看到這里,我在此感謝你的喜歡與支持
總結(jié)
以上是生活随笔為你收集整理的计算机的世界:[-bit之魂-]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 简单的jvm调优
- 下一篇: 新Astaroth***病毒可利用杀毒软