小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

char 與 unsigned char的本質(zhì)區(qū)別

 take_care 2012-05-13

char 與 unsigned char的本質(zhì)區(qū)別

在C中,默認(rèn)的基礎(chǔ)數(shù)據(jù)類(lèi)型均signed,現(xiàn)在我以char例,說(shuō)明(signed) char與unsigned char之的區(qū)別

首先在內(nèi)存中,charunsigned char沒(méi)有什么不同,都是一個(gè)字節(jié),唯一的區(qū)別是,char的最高位符號(hào)位,因此char能表示-128~127, unsigned char沒(méi)有符號(hào)位,因此能表示0~255,這個(gè)好理解,8個(gè)bit,最多256種情況,因此無(wú)如何都能表示256個(gè)數(shù)字。

實(shí)際使用過(guò)程種有什么區(qū)別呢?

主要是符號(hào)位,但是在普通的賦值,讀寫(xiě)文件和網(wǎng)絡(luò)字節(jié)流都沒(méi)什么區(qū)別,反正就是一個(gè)字節(jié),不管最高位是什么,最終的讀取結(jié)果都一樣,只是你怎么理解最高位而已,在屏幕上面的顯示可能不一樣。

但是我們卻發(fā)現(xiàn)在表示byte時(shí),都用unsigned char,這是為什么呢?

首先我們通常意義上理解,byte沒(méi)有什么符號(hào)位之說(shuō),更重要的是如果將byte的值賦給int,long等數(shù)據(jù)類(lèi)型時(shí),系統(tǒng)會(huì)做一些額外的工作。

如果是char,那么系統(tǒng)認(rèn)為最高位是符號(hào)位,而int可能是16或者32位,那么會(huì)對(duì)最高位進(jìn)行擴(kuò)展(注意,賦給unsigned int也會(huì)擴(kuò)展)

而如果是unsigned char,那么不會(huì)擴(kuò)展。

這就是二者的最大區(qū)別。

同理可以推導(dǎo)到其它的類(lèi)型,比如short, unsigned short。等等

具體可以通過(guò)下面的小例子看看其區(qū)別

include <stdio.h>

void f(unsigned char v)

{

char c = v;

unsigned char uc = v;

unsigned int a = c, b = uc;

int i = c, j = uc;

printf("----------------\n");

printf("%%c: %c, %c\n", c, uc);

printf("%%X: %X, %X\n", c, uc);

printf("%%u: %u, %u\n", a, b);

printf("%%d: %d, %d\n", i, j);

}

int main(int argc, char *argv[])

{

f(0x80);

f(0x7F);

return 0;

}

輸出結(jié)果

----------------

%c: ?, ?

%X: FFFFFF80, 80

%u: 4294967168, 128

%d: -128, 128

----------------

%c: ,

%X: 7F, 7F

%u: 127, 127

%d: 127, 127

由此可見(jiàn),最高位若0時(shí),二者沒(méi)有區(qū)別,若1時(shí),有區(qū)別了。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多