Ⅰ c語言中unsigned和signed在聲明時有什麼作用
1、unsigned的作用就是將數字類型無符號化, 例如 int 型的范圍:-2^31 ~2^31 - 1,而unsigned int的范圍:0 ~ 2^32。看起來unsigned 是個不錯的類型,尤其是用在自增或者沒有負數的情況。但是在實際使用中會出現一些意外的情況。
2、signed在默認情況下聲明的整型變數都是有符號的類型(char有點特別),如果需聲明無符號類型的話就需要在類型前加上unsigned。無符號版本和有符號版本的區別就是無符號類型能保存2倍於有符號類型的正整數數據。
(1)c語言編程sign的含義擴展閱讀:
unsigned和signed的區別
1、所有比int型小的數據類型(包括char,signed char,unsigned char,short,signed short,unsigned short)轉換為int型。如果轉換後的數據會超出int型所能表示的范圍的話,則轉換為unsigned int型
2、bool型轉化為int型時,false轉化為0,true轉換為1;反過來所有的整數類型轉化為bool時,0轉化為false,其它非零值都轉為true
3、如果表達式中混有unsigned short和int型時,如果int型數據可以表示所有的unsigned short型的話,則將unsigned short類型的數據轉換為int型,否則,unsigned short類型及int型都轉換為unsigned int類型
舉個例子,在32位機上int是32位,范圍–2,147,483,648 to 2,147,483,647,unsigned short是16位,范圍0 to 65,535,這樣int型的足夠表示unsigned short類型的數據,因此在混有這兩者的運算中,unsigned short類型數據被轉換為int型
4、unsigned int 與long類型的轉換規律同3,在32位機上,unsigned int是32位,范圍0 to 4,294,967,295,long是32位,范圍–2,147,483,648 to 2,147,483,647,可見long類型不夠表示所有的unsigned int型,因此在混有unsigned int及long的表達式中,兩者都被轉換為unsigned long
5、如果表達式中既有int 又有unsigned int,則所有的int數據都被轉化為unsigned int類型
Ⅱ 關於C語言中有符號型signed和無符號型unsigned的區別
1、表達數值范圍的不同
signed表示有符號的,其第一個位表示正負,其餘位表示大小,例如signedint大小區間為-128~127。
unsigned表示無符號的,所有位都為大小,沒有正負,例如unsignedint大小區間為0~127。
2、類型的不同
signed類型的整數,只用了去除最高位,剩下的15位來進行編碼的,而最高位只是用來做標記(sign),標記整數的正負,0表示正,1表示負。所以對於signed的整數,的存儲范圍是(-2^15to2^15-1),也就是-32768到+32767的整數。
而對於unsigned的整數,其16位全部用來編碼,存儲范圍便是(0to2^16-1),即0到65535的非負整數。所以呢你可以聲明inta=1,或者inta=-1,但是不可以聲明unsigneda=-1。但是需要提到的一點是,不管整數的類型是signed還是unsigned,都用了16位來存儲,也就是說16位全部用來存儲數據。
3、表達的數值不同
signed類型的整數只用了除去最高位剩餘的15為進行編碼,最高位用來標記整數的正負,0表示正,1表示負。所以對signed的整數存儲范圍為(-2^15~2^15-1)。
unsigned類型的整數其16為全部用來編碼,則unsigned的整數存儲范圍為(0~2^16-1)。