C的数据类型分类
1,整型
char, short, int , long
每个前面都可以加上unsigned ,表示无符号
无符号的时候注意三点:
1,可以多使用一个比特,
2,永远不可能小于0,因此在做数据比较时容易忽略
3,在做字节流操作时,请保留符号位(最高位)
所以很多编译器会内置一个类型
typedef unsigned char byte_t;
#define BYTE unsigned char
unsigned int uiX = xxx;
int iY = -1;
if(uiX < iY){
}
//会有警告
假设有8位二进制数
11111111
如果当做char就是-1
当做unsigned char就是255
00000001 =》 +1
11111111 =》 -1
why? 补码(反码(+1)) = -1
反码(+1) = 11111110
补码(11111110) = 11111111
char byX;//最大可表示127
unsigned char byY;最大可表示255
unsigned char iX = 255;
char iY = (char)iX;
printf("%d\n",iY);
1.1整型中各个类型的长度
char = 8-16
short = 16-32
int = 16 - 64
long = 32-64
根据不同编译器会有区别
在32位编译器中
char=8,short=16,int=32,long long=64
2,浮点型
float =>32
double =>64
2.1浮点计算是不准确的
在低精度的平台
if(3.141595666666 == 3.141595666666){
//可能运行不到这里
}
所以,浮点数的比较,会加上误差值
if(floatX - 3.14 <= 0.01){
}
浮点数组成(数字(小数点前与后),小数点后长度)
3,指针型
指针的本质,是内存的一个位置,理论上可以指向内存中任意一个位置
但为什么实际上不能?因为操作系统有做保护,只留下固定区间让应用程序读取
所以能力大,危险也大
任何类型的指针长度都是一样长的,都等于编译器的字长(word size)
sizeof(char*)==sizeof(short*)==sizeof(int*)==...
一个指针必须包含两方面信息
位置+类型=======以一个点为起点,取一个区间(那个类型的长度)
char chX = 'c';
char* pX = &chX;
printf("%c\n",*pX);
4,数组
5,复合型
结构体,联合体
struct,union
1,整型
char, short, int , long
每个前面都可以加上unsigned ,表示无符号
无符号的时候注意三点:
1,可以多使用一个比特,
2,永远不可能小于0,因此在做数据比较时容易忽略
3,在做字节流操作时,请保留符号位(最高位)
所以很多编译器会内置一个类型
typedef unsigned char byte_t;
#define BYTE unsigned char
unsigned int uiX = xxx;
int iY = -1;
if(uiX < iY){
}
//会有警告
假设有8位二进制数
11111111
如果当做char就是-1
当做unsigned char就是255
00000001 =》 +1
11111111 =》 -1
why? 补码(反码(+1)) = -1
反码(+1) = 11111110
补码(11111110) = 11111111
char byX;//最大可表示127
unsigned char byY;最大可表示255
unsigned char iX = 255;
char iY = (char)iX;
printf("%d\n",iY);
1.1整型中各个类型的长度
char = 8-16
short = 16-32
int = 16 - 64
long = 32-64
根据不同编译器会有区别
在32位编译器中
char=8,short=16,int=32,long long=64
2,浮点型
float =>32
double =>64
2.1浮点计算是不准确的
在低精度的平台
if(3.141595666666 == 3.141595666666){
//可能运行不到这里
}
所以,浮点数的比较,会加上误差值
if(floatX - 3.14 <= 0.01){
}
浮点数组成(数字(小数点前与后),小数点后长度)
3,指针型
指针的本质,是内存的一个位置,理论上可以指向内存中任意一个位置
但为什么实际上不能?因为操作系统有做保护,只留下固定区间让应用程序读取
所以能力大,危险也大
任何类型的指针长度都是一样长的,都等于编译器的字长(word size)
sizeof(char*)==sizeof(short*)==sizeof(int*)==...
一个指针必须包含两方面信息
位置+类型=======以一个点为起点,取一个区间(那个类型的长度)
char chX = 'c';
char* pX = &chX;
printf("%c\n",*pX);
4,数组
5,复合型
结构体,联合体
struct,union