標籤:short alt span 無符號 最好 位元 code image 不同
除了布爾型和擴充類型,其它整型可分為帶符號的和無符號的,帶符號的可表示正數、“0”、負數,不帶符號的只能表示正數和“0”,若要聲明變數為無符號類型可使用unsigned來聲明,聲明為有符號的用signed。像int、short、long這些類型預設都是帶符號的,因此不用聲明為帶符號的,若要聲明為無符號的話在在類型名前加unsigned就行。
字元型和其它整型不同,可分為三種,分別為char、signed char、unsigned char。要注意的是char 和 signed char並不一樣,字元的表現形式只有兩種,分別是signed char和unsigned char,如果不加聲明,char會表現為上面類型的其中一種,這由編譯器決定,因此一般不使用char來存放其它整數,若要使用,最好加聲明。
無符號的類型中的所有位元都用來儲存值,例如8bit的unsigned char表示的值的取值範圍是0~255。帶符號類型約定表示正值的範圍和負值的範圍相等,所以8bit的signed理論上可以表示的範圍是-127~127,但大多數電腦將實際表示的範圍定為-128~127。
下面示範一下:
#include <iostream>#include <stdio.h>using namespace std;int main(){ int val1=-1; unsigned val2=-1;//unsigned int cout<<val1<<endl; cout<<val2<<endl; //char char dat1=-1; signed char dat2=-1; unsigned char dat3=-1; printf("%d\n",dat1); printf("%d\n",dat2); printf("%d\n",dat3); return 0;}
上面示範的就是帶符號和無符號的區別,但會覺得奇怪為什麼把一個負數賦值給一個無符號類型的變數會得到一個這麼大的數,這是因為當我們賦值給無符號類型一個超過它範圍的值,結果是初始值對無符號類型表示數值總數模數後的的餘數。例如unsigned char類型大小為一個位元組,就是8位元,當我們賦-1給它的一個變數,-1已經超過了它的取值範圍,所以結果是該值對256模數後的所得的餘數,因此所得的結果是255。
c/c++帶符號類型和無符號類型