数据类型
char //字符数据类型 1字节
short //短整型 2字节
int //整形 4字节
long //长整形 >=4字节
long long //更长的整形 8字节
float //单精度浮点数 4字节
double //双精度浮点数 8字节
整型(char、short、int、long、long long)
char在存储的时候存储的是ASCII值,ASCII是整数,所以在归类时,字符属于整型家族。
整型又可以分为有符号整形和无符号整形
1、有符号整型
在类型前面加上 signed ,但是通常省略,因为它们与原类型是等价的。列如 在代码中打出 int 便等同于 signed int
取值范围:
char
-2^(8-1) – 2(8-1) -1 (即 -128 ~ 127)
int
-2^(32-1) – 2^(32-1)-1 (即 -2147483648 ~ 2147483647)
long
32位编译器中是4字节
-2^(32-1) – 2^(32-1)-1 (即 -2147483648 ~ 2147483647)
64位编译器中是8字节
-2^(63) ~ 2^(63)-1
long long
-2^(63) ~ 2^(63)-1
2、无符号整型
无符号数 在类型前面加上 unsigned 表示 ,没有正负,且无符号数最高位不是符号位,同样的是数的一部分,无符号数不可能是负数。
取值范围
unsigned char
0 ~ 2^8 -1 (即 0~255)
unsigned short
0 ~ 2^8 -1 (即 0~65535)
unsigned int
0 – 2^(32)-1 (即 0~4294967295)
unsigned long
32位编译器中是4字节
0 – 2^(32)-1 (即 0~4294967295)
64位编译器中是8字节
0~2^63-1
unsigned long long
0~2^63-1
3、整形在内存中的存储
整形在内存中以补码的形式进行存储。在内存中数据以二进制的形式进行存储,其中又分为原码、反码、补码。
原码、反码、补码的最高位是0表示正数,最高位是1表示负数。
位数不足的用0补齐
int a=5;(int类型4个字节,32个bit位)
转换成二进制:101
原码:00000000 00000000 0000000 00000101
原码:一个数的原码是将这个数直接转换成二进制
反码:原码的二进制符号位不变,其他位按位取反
补码:反码的二进制加1
需要注意的是:正数的原码、反码、补码相同;负数需要进行相应的转换。
大小端字节序
大端:.大端字节序是把数据的低字节内容存放到高地址,高字节内容存放在低地址处
小端:.小端字节序是把数据的低字节内容存放到低地址,高字节内容存放在高地址处
浮点型(float double)
浮点数在计算机内部以(-1)^S*M*2^E表示
(-1)^S表示符号位,当S=0,V为正数;当S=1,V为负数
M表示有效数字,大于等于1,小于2
2^E表示指数位
float a=5.5f;
=101.1(2);
=(-1)^0*1.011*2^2;
S=0;
101.1转换成科学计数法1.011*2^2
M=1.011
E=2
对于32位的浮点数,最高的1位是符号位s,接着的8位是指数E,剩下的23位为有效数字M
127+2=128+1 10000001
0 10000001 01100000000000000000000