unsigned char

char是C/C++整型數據中比較古怪的一個,其它的如int/long/short等不指定signed/unsigned時都默認是signed,但char在標準中是unsigned,編譯器可以實現為帶符號的,也可以實現為不帶符號的,有些編譯器如pSOS的編譯器,還可以通過編譯開關來指定它是有符號數還是無符號數。

基本介紹

中文名:unsigned char類別:c++關鍵字來源:c++用法:變數時會發生位元組截斷

介紹,存儲,類型轉換,char 與 unsigned char的本質區別,

介紹unsigned char是無符號位元組型,char類型變數的大小通常為1個位元組(1位元組=8個位),且屬於整型。整型的每一種都有無符號(unsigned)和有符號(signed)兩種類型(float和double總是帶符號的),在默認情況下聲明的整型變數都是有符號的類型(char有點特別),如果需聲明無符號類型的話就需要在類型前加上unsigned。無符號版本和有符號版本的區別就是無符號類型能保存2倍於有符號類型的數據,比如16位系統中一個int能存儲的數據的範圍為-32768~32767,而unsigned能存儲的數據範圍則是0~65535。同樣,在32位系統中一個char類型一般為8個bit,所以能存儲的數據範圍為-128~127,而unsigned char則是0~255,字元型所存儲的數據是用來表示字元的,例如ASCⅡ或Unicode。存儲unsigned char在計算機中使用補碼存儲,例如unsigned char a = 0xF7;a在計算機中存儲的方式為:11110111類型轉換int/unsigned int變數賦值給 unsigned char變數是會發生位元組截斷(9位和高於9位的將被程式自動丟棄)unsigned int a = 0xFFFFFFF7;unsigned char b = (unsigned char)a;此時b的值為 0xF7.char 與 unsigned char的本質區別在C中,默認的基礎數據類型均為signed,現在我們以char為例,說明(signed) char與unsigned char之間的區別。首先在記憶體中,char與unsigned char沒有什麼不同,都是一個位元組,唯一的區別是,char的最高位為符號位,因此char能表示-127~127,unsigned char沒有符號位,因此能表示0~255,這個好理解,8個bit,最多256種情況,因此無論如何都能表示256個數字。在實際使用過程種有什麼區別呢?主要是符號位,但是在普通的賦值,讀寫檔案和網路位元組流都沒什麼區別,反正就是一個位元組,不管最高位是什麼,最終的讀取結果都一樣,只是你怎么理解最高位而已,在螢幕上面的顯示可能不一樣。二者的最大區別是:但是我們卻發現在表示byte時,都用unsigned char,這是為什麼呢?首先我們通常意義上理解,byte沒有什麼符號位之說,更重要的是如果將byte的值賦給int,long等數據類型時,系統會做一些額外的工作。如果是char,那么系統認為最高位是符號位,而int可能是16或者32位,那么會對最高位進行擴展(注意,賦給unsigned int也會擴展)而如果是unsigned char,那么不會擴展。最高位若為0時,二者沒有區別,若為1時,則有區別了。同理可以推導到其它的類型,比如short, unsigned short,等等。具體可以通過下面的小例子看看其區別。include 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; }結果輸出如圖1:圖1結果分析:對於(signed)char來說,0x80用二進制表示為1000 0000,當它作為char賦值給unsigned int或 int 時,系統認為最高位是符號位,會對最高位進行擴展。而0x7F用二進制表示為0111 1111,最高位為0,不會擴展。對於unsigned char來說,不管最高位是0,還是1,都不會做擴展。

相關詞條

unsigned charchar是C/C++整型數據中比較古怪的一個,其它的如int/long/short等不指定signed/unsigned時都默認是signed,但char在標準中是unsigned,編譯器可以實現為帶符號的,也...

char(計算機語言關鍵字)char用於C或C++中定義字元型變數,只占一個位元組,取值範圍為 -128 ~ +127(-2^7~2^7-1)。C語言中如int、long、short等不指定signed或unsigned時都默認為...

charchar是C/C++整型數據中比較古怪的一個,其它的如int/long/short等不指定signed/unsigned時都默認是signed,但char在標準中是unsigned,編譯器可以實現為帶符號的,也...

getchar(unsigned char)*bb++:EOF; } 用法 該函式聲明在stdio.h頭檔案中,使用的時候要包含stdio.h頭檔案。如:#include int getchar(void);...

intrins.hunsigned char _crol_(unsigned char val,unsigned char n);unsigned int _irol_(unsigned int val,unsigned char n);unsigned int _lrol_(unsigned int val,...

報文unsigned char h_lenver; //4位首部長度+4位IP版本號unsigned char tos; //8位服務類型TOSunsigned short total_len; //16位總長度(位元組)...

無符號整型整型有無符號(unsigned)和有符號(signed)兩種類型,在默認情況下聲明的整型變數都是有符號的類型(char有點特別),如果需聲明無符號類型的話就需要在類型前加上...

C++關鍵字表示字元型和寬字元型這些整數類型(屬於基本類型),但一般只專用於表示字元。char(和signed char、unsigned char一起)事實上定義了位元組的大小。...

RC4/*初始化函式*/ void rc4_init(unsigned char*s,unsigned char*key, unsigned long Len) { int i=0,j=0; //char k[256]={0}; unsigned char k[256...

內置類型unsigned int = unsignedunsigned shortunsigned longunsigned charsigned charchar整型值表示unsigned 型如果定義32位表示值0~ -1signed型如果定義符號位表示值- ~ -...

strcmp#include #include #undef strcmp int strcmp(p1,p2) { const char *p1; const char *p2; register const unsignedchar *s1=(cons...

數據包報頭unsigned char destination_mac[6]; //目的MAC 6位元組unsigned char source_mac[6]; //源MAC 6位元組unsigned short type; //後面的協定類型2位元組ARP-0806;IP-...

74HC595(unsigned int SendVal); unsigned int Val; unsigned char code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char code digittab[18...

memcpyvoid *memcpy1(void *desc,const void * src,size_t size) { if((desc == NULL) && (src == NULL)) { return NULL; } unsigned char *desc1 = (...

strlen(C/C++語言函式)fun(unsiged char *p1,int len) { unsigned char* buf = new unsigned char[len+1]; memcpy(buf,p1,len); } 我們能常在用到 sizeof 和 strlen 的...

_tcscpyunsigned char *_mbscpy( unsigned char *strDestination, const unsigned char *strSource );常見名稱 要求的頭檔案 兼容方案strcpy ANSI, ...

#pragma//32位確認號 unsignedcharHaderLen:4;//4位首部長度 unsignedcharReserved1:4;//保留16位中的4位 unsignedcharReserved2:2;//保留16位中的2位 unsignedchar...

C語言類型強制轉換unsigned↑int ←── char,short 低● 圖中橫向箭頭表示必須的轉換,如兩個float型數參加運算,雖然它們類型相同,但仍要先轉成double型再進行運算,結果亦為double...

熱門詞條

歡樂智多星

ALVIERO MARTINI

Stephen Curry

金萱

Alpinestars

LUNA2

雞蛋仔

虛空先知

運動水壺

國立東華大學

吐奶

循環系統

斷舍離

宣萱

heroes

氯丁橡膠

算命

3D賽車遊戲

肯亞

愛呀愛上你

玉林荔枝狗肉節

沙發衝浪

歐亞紅松鼠

嚕啦啦

雲端運算

東福寺

亞歷珊德拉·達達里奧

Copyright © 2088 樊振东世界杯_世界杯开幕 - tyzksb.com All Rights Reserved.
友情链接