站長資訊網
        最全最豐富的資訊網站

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

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

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

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

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

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

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

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

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

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

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

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

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

        編碼

        在討論這個問題之前,我們先對部分知識點做一下普及。

        首先我們都知道計算機中儲存的信息都是用二進制數(shù)表示的,那怎么樣讓計算機存儲我們人類用的漢字或英文呢?

        比如如何將'a'轉換為二進制存儲到計算機中,稱為編碼

        而將存儲在計算機中的二進制數(shù)解析顯示出來,稱為解碼

        字符集

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

        unicode

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

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

        大多數(shù)計算機采用ASCII碼(美國標準信息交換碼),它是表示所有大小寫字母、數(shù)字、標點符號和控制字符的7位編碼方案。統(tǒng)一碼(Unicode)包含ASCII碼,'u0000'到'u007F'對應全部128個ACSII字符。

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

        內碼和外碼

        我們常說的java中的char占幾個字節(jié),應該是java中內碼中的char。

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

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

        length()

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

        看過前面的知識點不能再張嘴就來回答是1吧…… 寫個demo看一下:虎年就用虎來測試吧,tigerUTF對對應unicode編碼表示。

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

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

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

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 国产精品一区二区久久国产| 国产精品永久久久久久久久久| 91人妻人人澡人人爽人人精品| 中文字幕无码精品亚洲资源网久久 | 亚洲AV成人精品一区二区三区| 国产日韩久久久精品影院首页| 精品视频第一页| 国产精品丝袜一区二区三区| 亚洲精品无码永久在线观看| 久久亚洲精品无码观看不卡| 国产精品v欧美精品v日韩| 国产精品你懂的| 91精品国产高清久久久久久io | 99re6在线精品免费观看| 亚洲精品高清国产一线久久| 日韩专区亚洲精品欧美专区| 久久精品成人免费国产片小草| 国产成人精品午夜福麻豆| 日本精品久久久中文字幕| 国产精品久久久久久一区二区三区 | 国产精品久久久久jk制服| 人妻少妇精品中文字幕av蜜桃| 中文成人无字幕乱码精品区 | 国产精品久久久久影院色| 国产成人亚洲精品青草天美| 精品人妻人人做人人爽| 精品黑人一区二区三区| 国内精品久久久久久99蜜桃 | 国产精品扒开腿做爽爽爽视频| 麻豆国产在线精品国偷产拍| 日韩一区精品视频一区二区| 亚洲2022国产成人精品无码区 | Xx性欧美肥妇精品久久久久久 | 青娱乐国产精品视频| 久久精品国产只有精品66| 久草热久草热线频97精品| 久久精品国产色蜜蜜麻豆| 毛片a精品**国产| 亚洲午夜精品久久久久久app| 中文字幕精品无码久久久久久3D日动漫| 亚洲精品专区在线观看|