大家好,本次学习了c语言的数据类型和运算符,以下是我的学习收获
数据类型:内置类型,自定义类型
*此次只讨论内置类型
一. 内置类型分类
- 字符型 char
- 整型 short int / int / long int / long long
- 浮点型 float / double / long double
- 布尔类型_Bool *使用时需要包含头文件<stdbool.h>
1.1 signed和unsigned
c语言使用这两种方式来修饰字符型和整型类型
signed关键字表示一个类型带有正负号
unsigned关键字表示该类型不带正负号只表示0和正整数
注意:int默认是signed类型
char类型默认是否带有正负号由系统决定
1.2 数据类型在存储中所占字节
#include <stdio.h>
int main (){
printf("%d\n",sizeof(char));
printf("%d\n",sizeof(short));
printf("%d\n",sizeof(int));
printf("%d\n",sizeof(long));
printf("%d\n",sizeof(long long));
printf("%d\n",sizeof(float));
printf("%d\n",sizeof(double));
return 0;
}
分别输出 1 2 4 8 8 4 8
在输出long的字节时有的系统输出8有的输出4,若想写一个8字节的int变量请使用long long
二.变量的分类
全局变量:在大括号外部定义的变量叫做全局变量,在任何括号中都能调用它。
局部变量:在大括号内部定义的变量,只能在局部范围内使用
2.1全局变量/局部变量在存储中的位置
局部变量放在内存栈区中
全局变量放在内存的静态区中
三.算术操作符+,-,*,/
算术操作符都是双目操作符
双目操作符:两边都有操作数的操作符
3.1 运算图示
int a,b,c;
c=a+b;
c=a-b;
c=a*b;
c=a/b;
若相除时使用整数除那么结果也将是整数
例
#include <stdio.h>
int main(){
int a=7/4;
float b=7.0/4;
return 0;
}
结果是完全不相同的,a=1,b=1.750000
因为int是整数除,在除的过程中会发生截断,只保留整数部分
若想要小数除,需要使用float/double来定义变量,并且除号任意一边需要有小数部分
注意,在c语言中float类型的数据会自动转换成double类型的变量,若只想使用float类型的变量,请添加f
例
float a=7.3f;
3.2 取模运算 %
即返回两个整数除的余数,只能使用整数除不能用于浮点数
负数取模的规则是结果的正负号只由第一个运算数的正负号决定
例
#include <stdio.h>
int main(){
printf("%d\n",11%5);
printf("%d\n",-11%5);
printf("%d\n",11%-5);
return 0;
}
结果分别为 1,-1,1
四.赋值运算符:= 以及复合赋值
给变量一个初始值叫做变量的赋值运算
一次性给多个变量赋值叫做连续赋值
一个变量自增自减操作叫做复合赋值
例
#include <stdio.h>
int main(){
int a=5,b,c; //a这叫做赋值运算
b=c=a; //这叫做连续赋值
a=a+3; //这叫做复合赋值
return 0;
}
五.单目操作符:++,–,-,+
分为 前++,后++,前–,后–。
前++:先自+1,再运算
后++:先运算,再自+1
前–:先自减-1,再运算
后–:先运算,再自减-1
例
#include <stdio.h>
int main(){
int a=5,b=6,c;
++a;
printf("%d",a); //算出a=6
c=a++;
printf("%d",c);//c=6,此时a自+1,a=7
--b;
printf("%d",b);//此时b=5
c=b--;
printf("%d",c);// 此时c=5,b自减1,b=4
return 0;
}
5.1 +和-
这里的±作为正负号看,是单目运算符
5.2强制类型转换
(强制类型)数据
当发现我们要使用的数据类型与数据不符,就需要强转
#include <stdio.h>
int main() {
float a = 3.14;
int b=3.14;
printf("%f\n",(double)b);//将int类型的b转换成浮点型输出
printf("%d",(int)a);//将float类型的a转换成int类型输出
return 0;
}
结果为
本次学习到此结束,加油!