日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

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

 張巖峰 2011-09-16
char 與 unsigned char的本質(zhì)區(qū)別

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

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

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

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

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

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

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

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

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

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

具體可以通過下面的小例子看看其區(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); //10000000

f(0x7F); //01111111

return 0;

}

 

輸出結(jié)果

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

%c: ?, ?

%X: FFFFFF80, 80

%u: 4294967168, 128

%d: -128, 128

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

%c: ,

%X: 7F, 7F

%u: 127, 127

%d: 127, 127

由此可,最高位若0時(shí),二者沒有區(qū)別,若1時(shí),有區(qū)別了。

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多