有符号数和无符号数区别
有符号数和无符号数区别就是所能表示的范围不同
有符号数
有符号数是最高位为符号位,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修订版(黑马程序员)