摘要:數(shù)據(jù)怎么會(huì)有類型數(shù)據(jù)難道不就是或者組成的字節(jié)碼嗎沒錯(cuò),在計(jì)算機(jī)中,只能存儲(chǔ)或者,也就是說從存儲(chǔ)的角度來看,根本沒有類型這種東西,它們確實(shí)不過就是或者組成的字節(jié)碼。數(shù)據(jù)之所以有類型,那取決于人的看法,而不卻決于數(shù)據(jù)本身,數(shù)據(jù)本身是沒有類型的。
什么是數(shù)據(jù)類型
簡(jiǎn)單理解就是數(shù)據(jù)的類型。
what?數(shù)據(jù)怎么會(huì)有類型?數(shù)據(jù)難道不就是0或者1組成的字節(jié)碼嗎?
沒錯(cuò),在計(jì)算機(jī)中,只能存儲(chǔ)0或者1,也就是說從存儲(chǔ)的角度來看,根本沒有類型這種東西,它們確實(shí)不過就是0或者1組成的字節(jié)碼。
那為什么還會(huì)有數(shù)據(jù)類型?
因?yàn)?,類型是相?dāng)于編程者(人)來說的,人把數(shù)據(jù)分成不同的類型,方便理解,方便計(jì)算。
比如:
int a = 0x61; char b = 0x61; float c = 0x61; double d = 0x61; System.out.println(a+" "+b+" "+c+" "+d);
輸出結(jié)果是:97 a 97.0 97.0。
四個(gè)不同類型的變量,給與相同的字節(jié)碼0x61,但是輸出竟然不同!why?
因?yàn)榫幊陶?人)給0x61這個(gè)16進(jìn)制數(shù)賦予了類型,或者說給它賦予了含義。
為什么要賦予類型(含義)?是為了讓0或1的字節(jié)碼能夠表示更具體的東西,或是說把它映射為人能理解的東西。
不設(shè)置類型,也可以對(duì)0x61這個(gè)數(shù)進(jìn)行各種運(yùn)算,但是。。。what is the meaning?
沒有意義,對(duì)于一個(gè)整數(shù)進(jìn)行加減乘除具有現(xiàn)實(shí)意義,對(duì)于一個(gè)字符小寫變大寫具有現(xiàn)實(shí)意義,可是對(duì)于一個(gè)二進(jìn)制數(shù)的操作卻是沒有意義的。人不能理解的事情是沒有意義的。
那么什么是數(shù)據(jù)類型?
就是人看待數(shù)據(jù)的方式,人理解數(shù)據(jù)的方式,人規(guī)定數(shù)據(jù)的方式,這就是數(shù)據(jù)類型。
數(shù)據(jù)之所以有類型,那取決于人的看法,而不卻決于數(shù)據(jù)本身,數(shù)據(jù)本身是沒有類型的。
為什么上面程序的輸出不同?
因?yàn)檩敵鼍褪前褦?shù)據(jù)變成人想要的格式顯示給人看。
計(jì)算機(jī)怎么知道人想要什么格式?通過數(shù)據(jù)類型!
當(dāng)0x61被規(guī)定為int型時(shí)計(jì)算機(jī)就知道應(yīng)該顯示十進(jìn)制數(shù)6*16+1 = 97。
當(dāng)0x61被規(guī)定為char型時(shí)計(jì)算機(jī)就知道應(yīng)該顯示十進(jìn)制數(shù)6*16+1 = 97代表的ascii碼所對(duì)應(yīng)的字符"a"。
雖然它們?cè)谟?jì)算機(jī)中都是同一個(gè)字節(jié)碼0x61,但是因?yàn)槿艘?guī)定了類型,所以計(jì)算機(jī)才返回不同的結(jié)果。
從編解碼的角度來看
編碼是信息從一種形式或格式轉(zhuǎn)換為另一種形式的過程,解碼,是編碼的逆過程。
具體來講編碼就是,把人理解的東西轉(zhuǎn)換為計(jì)算機(jī)理解的東西,而解碼則是把計(jì)算機(jī)理解的東西轉(zhuǎn)換為人理解的東西。
計(jì)算機(jī)理解什么?只理解0和1,人呢?almost everything。
它們之間轉(zhuǎn)換的橋梁是什么?就是數(shù)據(jù)類型!人只有規(guī)定了數(shù)據(jù)的類型,規(guī)定人所理解的事情如何轉(zhuǎn)換為計(jì)算機(jī)理解的字節(jié)碼,才能完成這種轉(zhuǎn)換!
舉例:
對(duì)于97這個(gè)數(shù)字,人可以理解它為一個(gè)十進(jìn)制數(shù),但是計(jì)算機(jī)只能理解0或者1,那么如何讓計(jì)算機(jī)理解?
給97編碼。how?如果用二進(jìn)制編碼,則把97變成了1100001這個(gè)數(shù)。這樣計(jì)算機(jī)就理解(能存儲(chǔ)和計(jì)算)了,那么人怎么理解1100001這個(gè)二進(jìn)制碼呢?計(jì)算機(jī)在顯示的時(shí)候把1100001這個(gè)數(shù)進(jìn)行二進(jìn)制解碼,解碼成97,人就理解了,而之所以能轉(zhuǎn)換,是因?yàn)橐?guī)定了二進(jìn)制編碼解碼的規(guī)則,并且規(guī)定了它是個(gè)整數(shù)。而對(duì)于"a"這個(gè)字符,人理解為它是一個(gè)小寫字母a,如何讓計(jì)算機(jī)理解?還是編碼?編什么碼?編ASCII碼,"a"的ASCII碼是1100001,這樣計(jì)算機(jī)又理解(能存儲(chǔ)和計(jì)算)了,計(jì)算機(jī)如何讓人理解1100001,解碼!ASCII解碼,就變成了"a",這樣人就又理解了!。
不同的事物,使用不同的編碼方式可能得到相同的二進(jìn)制碼,而相同的二進(jìn)制碼,使用不同的解碼方式會(huì)被理解為不同的事物!
從本質(zhì)上來講什么是數(shù)據(jù)類型?
其實(shí)就是數(shù)據(jù)的編解碼的方式?。?!
最后,什么是字符集?
就是對(duì)字符的編碼解碼的方式!
不同字符集,規(guī)定了字符的編碼(字符轉(zhuǎn)換為二進(jìn)制數(shù))和解碼(二進(jìn)制數(shù)轉(zhuǎn)換為字符)方式。
System.out.println("你好".getBytes("utf-8") ); System.out.println("你好".getBytes("gbk") );
輸出:
[B@677327b6
[B@14ae5a5
可以看到不同的字符集(utf-8和gbk)把相同的中文"你好",編碼成了不同的二進(jìn)制碼。
當(dāng)然,上面輸出并不是0和1,顯然不是二進(jìn)制碼。。。那是因?yàn)橛?jì)算機(jī)顯示的時(shí)候把二進(jìn)制碼使用ASCII碼幫你解了碼。。。都變成了ASCII字符。why?我并不想讓它解碼,但是顯示就是解碼?。?!
當(dāng)然通過一些技巧可以輸出二進(jìn)制的字符串,但是這個(gè)不是重點(diǎn),這里就不給出了。
最后的最后
計(jì)算機(jī)最早在什么領(lǐng)域應(yīng)用了編解碼?
匯編語言!
計(jì)算機(jī)命令也是二進(jìn)制碼,把匯編語言的英語單詞變成二進(jìn)制碼就是編碼,而把二進(jìn)制碼變成匯編語言的單詞就是解碼!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/72191.html
摘要:要確保沒有低估需要存儲(chǔ)的值的范圍,更小是相對(duì)與數(shù)據(jù)類型的最大值范圍來講的。如果無法確定哪個(gè)數(shù)據(jù)類型是最好的,就選擇你認(rèn)為不會(huì)超過范圍的最小類型。整數(shù)類型有兩個(gè)類型的數(shù)字整數(shù)和實(shí)數(shù)。列默認(rèn)為,這與其他的數(shù)據(jù)類型不一樣。 簡(jiǎn)述 良好的邏輯設(shè)計(jì)和物理設(shè)計(jì)是高性能系統(tǒng)的基石,比如反范式設(shè)計(jì)可以加快某些類型的查詢同時(shí)也會(huì)影響另外一些類型的查詢效率,所以我們必須重視Mysql對(duì)于數(shù)據(jù)庫的設(shè)計(jì)(本...
摘要:要確保沒有低估需要存儲(chǔ)的值的范圍,更小是相對(duì)與數(shù)據(jù)類型的最大值范圍來講的。如果無法確定哪個(gè)數(shù)據(jù)類型是最好的,就選擇你認(rèn)為不會(huì)超過范圍的最小類型。整數(shù)類型有兩個(gè)類型的數(shù)字整數(shù)和實(shí)數(shù)。列默認(rèn)為,這與其他的數(shù)據(jù)類型不一樣。 簡(jiǎn)述 良好的邏輯設(shè)計(jì)和物理設(shè)計(jì)是高性能系統(tǒng)的基石,比如反范式設(shè)計(jì)可以加快某些類型的查詢同時(shí)也會(huì)影響另外一些類型的查詢效率,所以我們必須重視Mysql對(duì)于數(shù)據(jù)庫的設(shè)計(jì)(本...
摘要:它并沒有為整數(shù)給出一種特定的類型。例如,使用一個(gè)分隔符,一個(gè)可以模仿一個(gè)列表一個(gè)的數(shù)組可能更適合一些。不幸的是,當(dāng)一個(gè)分隔符在用于列表中的元素時(shí),打亂了這個(gè)列表。 JS常用數(shù)據(jù)類型 編程語言都具有內(nèi)建的數(shù)據(jù)結(jié)構(gòu),但各種編程語言的數(shù)據(jù)結(jié)構(gòu)常有不同之處。本文試圖列出 JavaScript 語言中內(nèi)建的數(shù)據(jù)結(jié)構(gòu)及其屬性,它們可以用來構(gòu)建其他的數(shù)據(jù)結(jié)構(gòu);同時(shí)盡可能的描述與其他語言的不同之處。 ...
閱讀 597·2021-11-22 14:45
閱讀 3090·2021-10-15 09:41
閱讀 1589·2021-10-11 10:58
閱讀 2807·2021-09-04 16:45
閱讀 2623·2021-09-03 10:45
閱讀 3253·2019-08-30 15:53
閱讀 1234·2019-08-29 12:28
閱讀 2149·2019-08-29 12:14