数据类型
# 数据类型
C语言是有数据类型的语言,C之后分为C++/Java为代表的更加强调类型的语言与Python/JS这种弱化类型的语言,强调类型的语言更加适合底层开发。
C语言中类型的作用:1.占据空间大小 2.输出格式 3.sizeof是静态运算符
#include <stdio.h>
int main()
{
int a;
printf("sizeof(a++)=%ld\n",sizeof(a++));
printf("a=%d\n",a);
printf("sizeof(a+1.0)=%ld\n",sizeof(a+1.0));
printf("a=%d\n",a);
return 0;
/*
sizeof(a++)=4
a=6
sizeof(a+1.0)=8
a=6
*/
}
# 整数类型
一个
int
类型表示的CPU中寄存器的宽度补码运算的使用就是为了避免在有符号数运算的过程中对符号的特殊考虑,例如为了得到
1+(-1)=0
可以利用溢出00000001+11111111=00000000
,可以看出补码的意义在于用补码和原码相加得出一个溢出的零。补码的表示范围,8位补码可以表示256个数,即
-128~-1和0~127

- 八进制,十六进制输入输出
int main()
{
int a = 012; //数字前加0表示八进制
int b = 0x12; //数字前加0x表示十六进制
printf("a=%d, b=%d\n",a,b);
printf("a=0%o,b=0x%x\n",a,b);
return 0;
/*
a=10,b=18
a=012,b=0x12
*/
}
- 编程中没有特别需要用
int
(内存对齐问题,可能会耗损CPU处理时间);unsigned只会用在底层硬件操作中,在编程时不用特别区分。
# 浮点类型
- 浮点类型输出,
%e
科学计数法;%.10f
输出十位小数;浮点数输出是四舍五入的,因为二进制数只能离散地表达十进制数。 - 超过范围的浮点数,无穷大
inf
,不存在nan
- 浮点数比较相等可能失败,用
fabs(f1-f2)<le-12
,浮点数在计算机中是不准确的,一般计算用BCD数或者整数,不用浮点数。
int main()
{
float a,b,c;
a = 1.345f;
b = 1.123f;
c = a + b;
if(c == 2.468)
{
printf("不相等\n");
}else{
printf("不相等!=c%.10f,或%f\n",c,c);
}
}
- 没有特殊需要,只使用
double
,与int
理由相似,使用double
进行运算,CPU内容也只需要一次内存存取就可以完成。
# 逻辑类型
bool
类型不是原生类型,使用时导入头文件#include <stdbool.h>
- 逻辑运算,与或非,
! > && > ||
- 短路现象:逻辑运算自左向右,左边运算完成就可以得到结果,不进行右边。
不要把赋值语句写进逻辑判断表达式
# 类型转换
- **自动类型转换:**当运算符的两边类型不一样时,会向字长长的的转换。
- 强制类型转换:
(类型+值
,类型转换要注意表示范围越界,强制类型转换得到的是新变量。 - 逗号运算:只用在for循环中,使用逗号右侧值。
上次更新: 2023/11/19, 12:55:48