摘要:數據怎么會有類型數據難道不就是或者組成的字節碼嗎沒錯,在計算機中,只能存儲或者,也就是說從存儲的角度來看,根本沒有類型這種東西,它們確實不過就是或者組成的字節碼。數據之所以有類型,那取決于人的看法,而不卻決于數據本身,數據本身是沒有類型的。
什么是數據類型
簡單理解就是數據的類型。
what?數據怎么會有類型?數據難道不就是0或者1組成的字節碼嗎?
沒錯,在計算機中,只能存儲0或者1,也就是說從存儲的角度來看,根本沒有類型這種東西,它們確實不過就是0或者1組成的字節碼。
那為什么還會有數據類型?
因為,類型是相當于編程者(人)來說的,人把數據分成不同的類型,方便理解,方便計算。
比如:
int a = 0x61; char b = 0x61; float c = 0x61; double d = 0x61; System.out.println(a+" "+b+" "+c+" "+d);
輸出結果是:97 a 97.0 97.0。
四個不同類型的變量,給與相同的字節碼0x61,但是輸出竟然不同!why?
因為編程者(人)給0x61這個16進制數賦予了類型,或者說給它賦予了含義。
為什么要賦予類型(含義)?是為了讓0或1的字節碼能夠表示更具體的東西,或是說把它映射為人能理解的東西。
不設置類型,也可以對0x61這個數進行各種運算,但是。。。what is the meaning?
沒有意義,對于一個整數進行加減乘除具有現實意義,對于一個字符小寫變大寫具有現實意義,可是對于一個二進制數的操作卻是沒有意義的。人不能理解的事情是沒有意義的。
那么什么是數據類型?
就是人看待數據的方式,人理解數據的方式,人規定數據的方式,這就是數據類型。
數據之所以有類型,那取決于人的看法,而不卻決于數據本身,數據本身是沒有類型的。
為什么上面程序的輸出不同?
因為輸出就是把數據變成人想要的格式顯示給人看。
計算機怎么知道人想要什么格式?通過數據類型!
當0x61被規定為int型時計算機就知道應該顯示十進制數6*16+1 = 97。
當0x61被規定為char型時計算機就知道應該顯示十進制數6*16+1 = 97代表的ascii碼所對應的字符"a"。
雖然它們在計算機中都是同一個字節碼0x61,但是因為人規定了類型,所以計算機才返回不同的結果。
從編解碼的角度來看
編碼是信息從一種形式或格式轉換為另一種形式的過程,解碼,是編碼的逆過程。
具體來講編碼就是,把人理解的東西轉換為計算機理解的東西,而解碼則是把計算機理解的東西轉換為人理解的東西。
計算機理解什么?只理解0和1,人呢?almost everything。
它們之間轉換的橋梁是什么?就是數據類型!人只有規定了數據的類型,規定人所理解的事情如何轉換為計算機理解的字節碼,才能完成這種轉換!
舉例:
對于97這個數字,人可以理解它為一個十進制數,但是計算機只能理解0或者1,那么如何讓計算機理解?
給97編碼。how?如果用二進制編碼,則把97變成了1100001這個數。這樣計算機就理解(能存儲和計算)了,那么人怎么理解1100001這個二進制碼呢?計算機在顯示的時候把1100001這個數進行二進制解碼,解碼成97,人就理解了,而之所以能轉換,是因為規定了二進制編碼解碼的規則,并且規定了它是個整數。而對于"a"這個字符,人理解為它是一個小寫字母a,如何讓計算機理解?還是編碼?編什么碼?編ASCII碼,"a"的ASCII碼是1100001,這樣計算機又理解(能存儲和計算)了,計算機如何讓人理解1100001,解碼!ASCII解碼,就變成了"a",這樣人就又理解了!。
不同的事物,使用不同的編碼方式可能得到相同的二進制碼,而相同的二進制碼,使用不同的解碼方式會被理解為不同的事物!
從本質上來講什么是數據類型?
其實就是數據的編解碼的方式!!!
最后,什么是字符集?
就是對字符的編碼解碼的方式!
不同字符集,規定了字符的編碼(字符轉換為二進制數)和解碼(二進制數轉換為字符)方式。
System.out.println("你好".getBytes("utf-8") ); System.out.println("你好".getBytes("gbk") );
輸出:
[B@677327b6
[B@14ae5a5
可以看到不同的字符集(utf-8和gbk)把相同的中文"你好",編碼成了不同的二進制碼。
當然,上面輸出并不是0和1,顯然不是二進制碼。。。那是因為計算機顯示的時候把二進制碼使用ASCII碼幫你解了碼。。。都變成了ASCII字符。why?我并不想讓它解碼,但是顯示就是解碼!!!
當然通過一些技巧可以輸出二進制的字符串,但是這個不是重點,這里就不給出了。
最后的最后
計算機最早在什么領域應用了編解碼?
匯編語言!
計算機命令也是二進制碼,把匯編語言的英語單詞變成二進制碼就是編碼,而把二進制碼變成匯編語言的單詞就是解碼!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72191.html
摘要:要確保沒有低估需要存儲的值的范圍,更小是相對與數據類型的最大值范圍來講的。如果無法確定哪個數據類型是最好的,就選擇你認為不會超過范圍的最小類型。整數類型有兩個類型的數字整數和實數。列默認為,這與其他的數據類型不一樣。 簡述 良好的邏輯設計和物理設計是高性能系統的基石,比如反范式設計可以加快某些類型的查詢同時也會影響另外一些類型的查詢效率,所以我們必須重視Mysql對于數據庫的設計(本...
摘要:要確保沒有低估需要存儲的值的范圍,更小是相對與數據類型的最大值范圍來講的。如果無法確定哪個數據類型是最好的,就選擇你認為不會超過范圍的最小類型。整數類型有兩個類型的數字整數和實數。列默認為,這與其他的數據類型不一樣。 簡述 良好的邏輯設計和物理設計是高性能系統的基石,比如反范式設計可以加快某些類型的查詢同時也會影響另外一些類型的查詢效率,所以我們必須重視Mysql對于數據庫的設計(本...
閱讀 582·2021-11-22 14:45
閱讀 3070·2021-10-15 09:41
閱讀 1555·2021-10-11 10:58
閱讀 2797·2021-09-04 16:45
閱讀 2606·2021-09-03 10:45
閱讀 3238·2019-08-30 15:53
閱讀 1221·2019-08-29 12:28
閱讀 2133·2019-08-29 12:14