一:常用数据类型对应字节数
可用如
sizeof
(
char
),
sizeof
(
char
*)等得出
32位编译器:
char
:1个字节
char
*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)
short
int
: 2个字节
int
: 4个字节
unsigned
int
: 4个字节
float
: 4个字节
double
: 8个字节
long
: 4个字节
long
long
: 8个字节
unsigned
long
: 4个字节
64位编译器:
char
:1个字节
char
*(即指针变量): 8个字节
short
int
: 2个字节
int
: 4个字节
unsigned
int
: 4个字节
float
: 4个字节
double
: 8个字节
long
: 8个字节
long
long
: 8个字节
unsigned
long
: 8个字节、
二:
在16位环境下,
int
/unsigned
int
占16位,
long
/unsigned
long
占32位
在32位环境下,
int
占32位,unsigned
int
占16位,
long
/unsigned
long
占32位
何时需要使用:
long
和
int
范围是[-2^31,2^31),即-2147483648~2147483647,而unsigned范围是[0,2^32),即0~4294967295,所以常规的32位整数只能够处理40亿左右,当遇到比40亿大的多的数就要用到64位。
64位使用范围:
不 同的编译器对64位整数的扩展有所不同,VC使用
__int64
/unsigned
__int64
,范围是[-2^63, 2^63)和[0,2^64),即-9223372036854775808~9223372036854775807与 0~18446744073709551615(约1800亿亿)。
注意点:
1、编译器不同导致使用64位的申明方式不同;
2、
long
long
/ unsigned
long
long
一般是Linux下申明方式、如:G++
3、
__int64
/unsigned
__int64
一般是Windows下使用64位的申明方式,如:VS
4、在赋值时需要注意加上ll进行显式赋值;
5、当进行64位与 32位的混合运算时,32位整数会被隐式转换成64位整数。
6、输出
printf
(
""
);,
long
long
使用%lld输出,
__int64
使用%I64d,无符号使用u替代d即可。
7、测试下来编译器一般都支持2种操作,不必太过纠结,怎么使用看个人喜欢。