有符號數和無符號數區別就是所能表示的范圍不同
有符號數
有符號數是最高位為符號位,0代表正數,1代表負數。
#include <stdio.h>
int main()
{
signed int a = -1089474374; //定義有符號整型變量a
printf("%X\n", a); //結果為 BF0FF0BA
//B F 0 F F 0 B A
//1011 1111 0000 1111 1111 0000 1011 1010
// 這里 -1089474374 是負數,所以,最高位為1
return 0;
}
無符號數
無符號數最高位不是符號位,而就是數的一部分,無符號數不可能是負數。
#include <stdio.h>
int main()
{
unsigned int a = 3236958022; //定義無符號整型變量a
printf("%X\n", a); //結果為 C0F00F46
//C 0 F 0 0 F 4 6
//1100 0000 1111 0000 0000 1111 0100 0110
// 這里 3236958022 是正數,即便最高位為1
return 0;
}
當我們寫程序要處理一個不可能出現負值的時候,一般用無符號數,這樣可以增大數的表達最大值。
有符號和無符號整型取值范圍
默認是有符號型的
數據類型 long 一般在 32 位程序中為 4 字節,在 64 位程序中則為 8 字節 。
數據類型 | 占用空間 | 取值范圍 |
---|---|---|
short | 2字節 | -32768 到 32767 (-\(2^{15}\) ~ \(2^{15}\)-1) |
int | 4字節 | -2147483648 到 2147483647 (-\(2^{31}\) ~ \(2^{31}\)-1) |
long | 4字節 | -2147483648 到 2147483647 (-\(2^{31}\) ~ \(2^{31}\)-1) |
unsigned short | 2字節 | 0 到 65535 (0 ~ \(2^{16}\)-1) |
unsigned int | 4字節 | 0 到 4294967295 (0 ~ \(2^{32}\)-1) |
unsigned long | 4字節 | 0 到 4294967295 (0 ~ \(2^{32}\)-1) |
參考:
[1]C基礎講義2018修訂版(黑馬程序員)