c语言数据类型如图:
图中的单位为
byte
(字节),1 byte = 8 bit
.
-
整形数据的存储都是以补码的形式存储的
-
对于负数,进行以下的转换:
如数
-254
,在存储该数时:
- 先对其取绝对值
- 在转换成二进制
- 对二进制数取反加一即可。
- 对于浮点数的存储,采用诸如下面的存储方式:
3.14 = 0.314 * 10^{-1}\\精度
-
不同类型数据之间转换
一般在数据转换过程中会出现数据丢失的情况,并且不存在四舍五入的情况
(1)隐式转换
比如:
int i; //(int 32bit 4byte)
float f; //(float 32bit 4byte)
double d; //(double 64bit 8byte)
char ch; //(char 8bit 1byte)
进行如(i + ch)- (d + f)
时,运算结果会取占用字节数最多的数。
上式等于int - double = double
,最终的结果转化成double
类型。这就是隐式转换。
(2)显示转换(——>强制类型转换)
-
特殊类型
(1)bool类型(逻辑值——真或假)
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main()
{
bool a = false;
printf("a = %d\n",a);
exit(0);
}
上面代码输出值为0
,bool
类型在输出值时只有0
或1
。
(2)float类型(表示一个范围)
float类型只是表示精度,一个范围,无法定义其与某一个数精确相等
比如
1/3*3=3
但在计算机计算时,这种情况不存在
1/3*3=0.3333\.{3}*3=0.9999\.{9}
若表示两者相等,则需要规定误差范围。示例代码,
float
类型的数与整形数相等:#include <stdio.h> #include <stdlib.h> int func(float f) { //if(f == 1) // or f == 1 这种情况不存在的 //改写为: if(fabs(f-1) <= 1e-6) return 1; }
(3)char
是否有符号(不知道)
(4)不同形式的0
值
0
'0'
(字符)\0
(NULL)"0"
(字符串)