站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

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

char類型在C或C++中占1個(gè)字節(jié),在java中占2個(gè)字節(jié)。char用于C或C++中是定義字符型變量的,而char數(shù)據(jù)類型是一種整數(shù)類型,只會(huì)占據(jù)1個(gè)字節(jié)。而在java中char類型占2個(gè)字節(jié)是因?yàn)镴ava編譯器默認(rèn)使用Unicode編碼,因此2字節(jié)(16位)可以表示所有字符。

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

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

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

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

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é)”

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

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

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

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

編碼

在討論這個(gè)問題之前,我們先對(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ù)解析顯示出來,稱為解碼

字符集

字符(Character)是各種文字和符號(hào)的總稱,包括各國家文字、標(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)一碼, 也叫萬國碼,符號(hào)數(shù)量在不斷增加,已超百萬 。

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

大多數(shù)計(jì)算機(jī)采用ASCII碼(美國標(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)間映射,卻沒有規(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)碼和外碼

我們常說的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采用固定長度2字節(jié)的方式編碼,兩個(gè)字節(jié)可以表示65536種符號(hào)(其實(shí)真正能表示要比這個(gè)少),足以表示當(dāng)時(shí)unicode中所有字符。但是隨著unicode中字符的增加,2個(gè)字節(jié)無法表示所有的字符,UTF16采用了2字節(jié)或4字節(jié)的方式來完成編碼。Java為應(yīng)對(duì)這種情況,考慮到向前兼容的要求,Java用一對(duì)char來表示那些需要4字節(jié)的字符。所以,java中的char是占用兩個(gè)字節(jié),只不過有些字符需要兩個(gè)char來表示。 這里就解釋了為什么有些字符需要兩個(gè)char來表示的問題。

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

length()

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

看過前面的知識(shí)點(diǎn)不能再張嘴就來回答是1吧…… 寫個(gè)demo看一下:虎年就用虎來測試吧,tigerUTF對(duì)對(duì)應(yīng)unicode編碼表示。

         String tiger = "?";          String tigerUTF = "uD83DuDC05";          System.out.println(tigerUTF);          System.out.println(tiger.length());           System.out.println(tiger.codePointCount(0,tiger.length()));
登錄后復(fù)制

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

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

贊(0)
分享到: 更多 (0)
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
99精品国产第一福利网站| 国语自产精品视频在线区| 国产精品久久久久一区二区三区| 久久香蕉国产线看观看精品yw| 亚洲中文久久精品无码ww16| 国产精品无码久久久久| 精品一区二区三区在线播放| 国产精品国语自产拍在线观看| 精品日产一卡2卡三卡4卡自拍| 色播精品免费小视频| 亚洲美女精品视频| 久久精品国产亚洲av影院| 无码人妻精品一区二区三区在线| 国内精品久久久久影院日本| 97在线精品视频| 国产一区二区精品久久凹凸| 久久99热这里只有精品国产| 国产精品午夜免费观看网站| 国产精品1024在线永久免费| 亚洲国产精品自在拍在线播放| 国产日韩视频一区| 日韩无套内射视频6| 九九精品国产亚洲AV日韩| 亚洲日韩精品无码AV海量| 中文字幕日韩一区| 亚洲欧洲日韩国产| 2020无码专区人妻系列日韩| 日韩精品视频免费在线观看| 日韩精品免费一区二区三区| 日韩免费观看视频| 一区二区国产精品| 丰满人妻熟妇乱又伦精品软件| 亚洲精品成a人在线观看| 亚洲精品国产精品乱码不卡| 亚洲精品视频免费观看| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 三上悠亚精品一区二区久久| 中文字幕在线久热精品| 伊人精品久久久大香线蕉99| 亚洲一区爱区精品无码| 久久精品人人做人人爽电影|