久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

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

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

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

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

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

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

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

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

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

而如果是unsigned char,,那么不會擴展。

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

同理可以推導到其它的類型,,比如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;

}

 

輸出結果

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

%c: ?, ?

%X: FFFFFF80, 80

%u: 4294967168, 128

%d: -128, 128

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

%c: ,

%X: 7F, 7F

%u: 127, 127

%d: 127, 127

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

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多