人妻精品在线观看一区二区三区,蜜臀av精品一区二区三区网站,中文一区二区三区亚洲欧美,熟女人妇精品一区二区,人妻av在线观看视频,欧美日韩国产三级精品网站,黄色免费网站直接进入,超碰公开福利正在播放,国产毛片乡下农村妇女毛片

char類型要占幾個(gè)字節(jié)-新要聞

來(lái)源:php中文網(wǎng) | 2023-03-10 15:45:39 |

本教程操作環(huán)境:windows7系統(tǒng)、Dell G3電腦。

我百度搜索“char占幾個(gè)字節(jié)”,得到下面的答案:


(相關(guān)資料圖)

char用于C或C++中定義字符型變量,是一種整數(shù)類型,只占一個(gè)字節(jié),取值范圍為 -128 ~ +127(-27~27-1)。

char類型占1字節(jié),就是8位,所能存儲(chǔ)的正整數(shù)是 0111 1111,即127。

顯然這不是我們想要的結(jié)果,于是我繼續(xù)搜索“java中的char占幾個(gè)字節(jié)”

Java中的char用于存放字符的數(shù)據(jù)類型,占用2個(gè)字節(jié),采用unicode編碼,它的前128字節(jié)編碼與ASCII兼容,只不過(guò)有些字符需要兩個(gè)char來(lái)表示。

為什么C或C++和java中的char占用字節(jié)數(shù)不相同?

有些字符需要兩個(gè)char來(lái)表示又是什么意思?

編碼

在討論這個(gè)問(wèn)題之前,我們先對(duì)部分知識(shí)點(diǎn)做一下普及。

首先我們都知道計(jì)算機(jī)中儲(chǔ)存的信息都是用二進(jìn)制數(shù)表示的,那怎么樣讓計(jì)算機(jī)存儲(chǔ)我們?nèi)祟愑玫臐h字或英文呢?

比如如何將"a"轉(zhuǎn)換為二進(jìn)制存儲(chǔ)到計(jì)算機(jī)中,稱為編碼

而將存儲(chǔ)在計(jì)算機(jī)中的二進(jìn)制數(shù)解析顯示出來(lái),稱為解碼

字符集

字符(Character)是各種文字和符號(hào)的總稱,包括各國(guó)家文字、標(biāo)點(diǎn)符號(hào)、圖形符號(hào)、數(shù)字等。字符集(Character set)是多個(gè)字符的集合,字符集種類較多,每個(gè)字符集包含的字符個(gè)數(shù)不同,常見字符集名稱:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等。這是百度百科給的解釋,反正就是字符集是一些字符的集合,字符集種類多,字符集中的字符數(shù)量也各不相同。計(jì)算機(jī)要準(zhǔn)確的處理各種字符集文字,需要進(jìn)行字符編碼,以便計(jì)算機(jī)能夠識(shí)別和存儲(chǔ)各種文字。

unicode

它的名字叫統(tǒng)一碼, 也叫萬(wàn)國(guó)碼,符號(hào)數(shù)量在不斷增加,已超百萬(wàn) 。

在創(chuàng)造Unicode之前,有數(shù)百種編碼系統(tǒng)。沒(méi)有一個(gè)編碼可以包含足夠的字符,從它的名字就可以看出這是一種所有符號(hào)的編碼,每一個(gè)符號(hào)都給予一個(gè)獨(dú)一無(wú)二的編碼,那么各個(gè)不同編碼導(dǎo)致的亂碼問(wèn)題就會(huì)消失。

大多數(shù)計(jì)算機(jī)采用ASCII碼(美國(guó)標(biāo)準(zhǔn)信息交換碼),它是表示所有大小寫字母、數(shù)字、標(biāo)點(diǎn)符號(hào)和控制字符的7位編碼方案。統(tǒng)一碼(Unicode)包含ASCII碼,"\u0000"到"\u007F"對(duì)應(yīng)全部128個(gè)ACSII字符。

不禁讓我感慨,有實(shí)力的人才能制定標(biāo)準(zhǔn)。 Unicode 只是一個(gè)符號(hào)集,它只規(guī)定了符號(hào)的二進(jìn)制代碼,僅僅提供字符與編號(hào)間映射,卻沒(méi)有規(guī)定這個(gè)二進(jìn)制代碼應(yīng)該如何存儲(chǔ)。 我們知道英文字母的編號(hào)特別小,用一個(gè)字節(jié)就完全能夠表示,而unicode中的中文符號(hào)的編號(hào)就很大了,一個(gè)字節(jié)根本不行。 于是后面出現(xiàn)了unicode字符存儲(chǔ)的多種實(shí)現(xiàn)方式,比如UTF-8,UTF-16等。 UTF-8 是在互聯(lián)網(wǎng)上使用最廣的一種 Unicode 的實(shí)現(xiàn)方式。

內(nèi)碼和外碼

我們常說(shuō)的java中的char占幾個(gè)字節(jié),應(yīng)該是java中內(nèi)碼中的char。

內(nèi)碼是指java運(yùn)行時(shí),其char和string在內(nèi)存中的編碼方式;外碼是程序與外部交互時(shí)外部使用的字符編碼,比如序列化技術(shù)。 外碼可以理解為:只要不是內(nèi)碼,那就是外碼。 要注意的是,源代碼編譯產(chǎn)生的目標(biāo)代碼文件(可執(zhí)行文件或class文件)中的編碼方式屬于外碼。 JVM中內(nèi)碼采用UTF16。 UTF-16 的 16 指的就是最小為 16 位一個(gè)單元,也即兩字節(jié)為一個(gè)單元。早期,UTF16采用固定長(zhǎng)度2字節(jié)的方式編碼,兩個(gè)字節(jié)可以表示65536種符號(hào)(其實(shí)真正能表示要比這個(gè)少),足以表示當(dāng)時(shí)unicode中所有字符。但是隨著unicode中字符的增加,2個(gè)字節(jié)無(wú)法表示所有的字符,UTF16采用了2字節(jié)或4字節(jié)的方式來(lái)完成編碼。Java為應(yīng)對(duì)這種情況,考慮到向前兼容的要求,Java用一對(duì)char來(lái)表示那些需要4字節(jié)的字符。所以,java中的char是占用兩個(gè)字節(jié),只不過(guò)有些字符需要兩個(gè)char來(lái)表示。 這里就解釋了為什么有些字符需要兩個(gè)char來(lái)表示的問(wèn)題。

另外:Java的class文件采用UTF8來(lái)存儲(chǔ)字符,也就是說(shuō),class中字符占1~6個(gè)字節(jié)。 Java序列化時(shí),字符也采用UTF8編碼,占1~6個(gè)字符。

length()

那再來(lái)一個(gè)問(wèn)題:Java中的一個(gè)字符的String.length()是多少?

看過(guò)前面的知識(shí)點(diǎn)不能再?gòu)堊炀蛠?lái)回答是1吧...... 寫個(gè)demo看一下:虎年就用虎來(lái)測(cè)試吧,tigerUTF對(duì)對(duì)應(yīng)unicode編碼表示。

String tiger = "?";         String tigerUTF = "\uD83D\uDC05";         System.out.println(tigerUTF);         System.out.println(tiger.length());          System.out.println(tiger.codePointCount(0,tiger.length()));

可以得出調(diào)用String.length()得到的結(jié)果為2,表示的是stirng的char數(shù)組占UTF-16格式的2個(gè)代碼單元(即4個(gè)字節(jié)),而不是有多少個(gè)字符。 當(dāng)然我們想要獲取多少個(gè)字符,可以使用codePointCount方法來(lái)獲取。

更多相關(guān)知識(shí),請(qǐng)?jiān)L問(wèn)常見問(wèn)題欄目!

以上就是char類型要占幾個(gè)字節(jié)的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!

關(guān)鍵詞: