c語言中unsigned和signed在宣告時有什麼作用

2021-03-20 02:44:12 字數 2915 閱讀 9531

1樓:亦木靜汐

^1、unsigned的作用就是將數字型別無符號化, 例如 int 型的範圍:-2^31 ~ 2^31 - 1,而unsigned int的範圍:0 ~ 2^32。

看起來unsigned 是個不錯的型別,尤其是用在自增或者沒有負數的情況。但是在實際使用中會出現一些意外的情況。

2、signed在預設情況下宣告的整型變數都是有符號的型別(char有點特別),如果需宣告無符號型別的話就需要在型別前加上unsigned。無符號版本和有符號版本的區別就是無符號型別能儲存2倍於有符號型別的正整數資料。

2樓:匿名使用者

signed 和 unsigned 是c語言中的型別指示符(type specifier),signed 指示被宣告的物件的型別為有符號整型(signed integer type),unsigned 指示被宣告的物件的型別為無符號整型(unsigned integer type)。

除了用於 bit field,單獨使用的 int 即指示有符號整型,此時 signed 沒有實際意義,int 和 unsigned 一同使用時指示無符號整型。

char,signed char,unsigned char 是三個不同的型別(char 和另外兩個之一的二進位制表示方法相同,至於 char 具體是否有符號,通常可通過編譯指令指定)。

對於 bit field, signed int 型別的 bit field 總是有符號的,unsigned int 型別的 bit field 總是無符號的,而單獨使用的 int 是否表示有符號,由編譯器定義。

無符號數的二進位制表示(object representation)由兩部分構成,即 value bits 和 padding bits,value bits 是一串二進位制位,第 m 個 value bit 表示 2 的 m-1 次方,因此 n 個 value bits 加起來就可以表示 0 到 2 的 n 次方減一 這個範圍內的所有整數。padding bits 不影響數的值(可能不存在 padding bit )。

有符號數的二進位制表示(object representation)由三部分構成,即 sign bit,value bits 和 padding bits ,其中 sign bit 只有一位,這一位的值為 0 時表示這個數為正數,此時它不影響有符號數的值,value bits 的含義與無符號數中的 value bits 相同。sign bit 為 1 時表示這個數為負數,此時這個數可以使用原碼、反碼、補碼 中的任何一種編碼來表示數值。和無符號數一樣,padding bits 不影響數的值(可能不存在 padding bit )。

例如,當某個無符號型別有 32 個value bits 時,它的第 1 個 value bit 表示 2 的 0 次方,第 2 個 value bit 表示 2 的 1 次方,……,第 32 個 value bit 表示 2 的 31 次方。當所有 value bits 都為 1 時,就表示 2 的 0 次方加 2 的 1 次方加……加 2 的 31 次方,即 2 的 32次方減一;當所有的 value bits 都為 0 時,就表示 0 ,這個無符號型別的取值範圍就是 0 到 2 的 32 次方減一。

與之對應的有符號型別有 1 個sign bit 和 31 個 value bits,當 sign bit 為 0 時,可以表示 0 到 2 的 31 次方減一範圍內的任何一個整數,如果使用補碼,當 sign bit 為 1 時,可以看作 sign bit 的值是 2 的 31 次方 的相反數,因此當 sign bit 為 1 時 sign bit 加上 value bit 一共可以表示 2 的 31 次方 的相反數到 -1 範圍內的任何一個整數,考慮所有情況,這個有符號型別的取值範圍就是 2 的 31 次方 的相反數 到 2 的 32 次方減一。

3樓:幻の上帝

signed和unsigned用於修飾整數型別(包括char,從ansi c89標準開始支援)。

signed表示有符號

,unsigned表示無符號。對應的有符號數的最大取值要比無符號的小約一半,因為最高一位被用來表示符號。

預設的int、short、long、long long為有符號數,也就是說,int等價於signed int,short等價於signed short,long等價於signed long,long long等價於signed long long。但是char本身是signed char還是unsigned char,取決於語言的實現(編譯器)。

範圍列表如下:

signed char:[-2^7, 2^7)即[-128, 128);

unsigned char:[0, 2^8)即[0, 256);

signed n位整數:[-2^(n-1), 2^(n-1));

unsigned n位整數:[0, 2^n)。

注意整數型別佔多少空間是不確定的,只能保證sizeof(shor)<=sizeof(int)<=sizeof(long)。一般32位平臺上,int和long為32位,short為16位,long long為64位。

====

[原創回答團]

4樓:匿名使用者

主要是取值範圍。

unsigned和signed在一種型別下,unsigned表示在這個範圍大小的整數,signed一般都是在這個範圍內的從負到正

有什麼不明白可以hi我 細聊

5樓:匿名使用者

簡單說,unsigned是無符號型別,signed 是有符號型別。比如unsigned int 的取植範圍從零開始,signed int 取植有負數。

不明白搜尋百度百科 unsigned 就可以

6樓:

unsigned宣告一個變數為無符號數,signed宣告一個變數為有符號數.

比如: unsigned char i1;//i1資料範圍為0~255

signed char i2; //i2資料範圍為-128~-127

c語言裡面si是什麼意思C語言中si什麼意思

s i 的意思是 s s i 將s的值加上i的值賦給s,i的值再自增1 s s i 就是s s i 是一個複合運算子,再比如x y 1 相當於x x y 1 s s i 就是s s i s等於s加i 即是s s i 擴充套件資料一 c語言複合賦值運算子 加賦值 減賦值 乘賦值 除賦值 求餘賦值 按位...

c語言中的for語句和ni語句,C語言中的for語句和n i 語句

n 這種形式是字尾自增1運算,表示先使用n值,然後n n 1自增1 i這種形式是字首自增1運算,表示先對i進行i i 1自增1,然後再使用i值 如果是單獨執行這樣的語句,兩者沒有區別,如 for i 0 i 輸出0 9 與for n 0 n 輸出0 9 這兩者都會迴圈10次,沒有差別。而下面的語句 ...

c語言中aa和a的區別,C語言中d和f還有c有什麼區別

a 是 單個字元,a 是 字串就是多個字元的集合實際上,a 等價於 a 0 末尾還有字串結束符 c語言中 d和 f還有 c有什麼區別 c,後邊的引數當字元處理 d,後邊的引數當整數處理 f,後邊的引數當浮點數處理。d是int型資料的萬用字元 f是float型資料的萬用字元 c是char型資料的萬用字...