变量:
- 什么是变量?一个可以存储数据(存储的地方在内存中),并可以在代码的运行中,给与数据的改变
- 注意:变量的声明必须在最前面
- 语法:数据类型 变量名称 = 值;
- 案例:
- %d - 输出一个整数 %.2f - 输出一个小数(2代表的是小数位,可以改变)
- %c - 输出一个字符 %s - 输出一个字符串
-
//引入头文件 #include <stdio.h> void main(){ int num = 1; //给num变量赋值1 double score = 2.3; char gendr = 'A'; char name[] = "我是字符串"; //注意:改被值的内容,要放到所有变量声明的后面 //因为c语言的变量声明必须在最前面,num = 2已经不是变量声明 num = 2; //改变a变量值 printf("num=%d score=%.2f gendr=%c name=%s",num,score,gendr,name); getchar();//让窗口停留(cmd窗口) }
-
内存分析:
- 不同的变量,改成(不同的数据) - 画图时搞错
-
细节:
- 变量表示内存中的一个存储区域,(不同的数据类型,占空间也不一样)
- 变量必先声明,后使用
- 变量名,在同一个作用域不能重名
- 同一类型,并同一区域的变量,可以不断变化(不遵守,可能导致数据丢失)
数据类型:
- 什么是数据类型?用来表示一个数据是什么类型,并在内存中分配对应的类型空间大小,不同的类型分配的内存大小也不一样
- 有哪些数据类型? - 记下来
- 注意:在C语言中没有字符串类型,用字符数组表示字符串
- 在不同的系统上,部分的数据类型长度不一样,如int可能是2或4
-
整数类型:
- 整数类型的作用? 用来存放整数,负整数和正整数都可以,但不同的整数可以存放的值范围也不同
- 如:int 在系统上是2个字节值范围就是:-32768到32767 (如果超过该值,就会出现越界的问题,导致数据混乱)
- 如:int在系统上是4个字节值范围就是:-214483648到2147483647
- 为什么会同样是int分2个字节和4个字节?
- 因为跟操作系统、系统位数、编译器有关
- C语言的数据类分有符号和无符号?
- 有符号 sigend int - 等价于int - C语言默认是带符号 - 其它数据类型也分有无符号,不止是int类型有
- 无符号 unsigned int - 值范围 - 0到65636 - 占2个字节
- 区别:
- 值范围不同,主要原因底层二进制分析不同
- 案例:
-
#include <stdio.h> void main(){ int i = 2147483647; signed int j = 2147483648; //越界 unsigned int q = 999999655351; //越界 printf("int的字节数=%d\n",sizeof(int)); printf("i=%d j=%d q=%d",i,j,q); getchar();//让窗口停留(cmd窗口) }
-
整数类型细节:
- C程序中整数说明一般用int型,不够在使用long或者long long
- long的输出是 %ld
- long long的输出是 %lld
- bit(位):计算机中最小的存储单位
- byte(字节):计算机中基本的存储单位
- 1byte=8bit
- C程序中整数说明一般用int型,不够在使用long或者long long
- 整数类型的作用? 用来存放整数,负整数和正整数都可以,但不同的整数可以存放的值范围也不同
-
浮点类型:
- 浮点数的作用?用来表示一个小数,如:123.1,99.9等
- 浮点数又分两个精度?
- float-单精度:存储大小(4给字节),值范围1.2E-38到3.4E+38,精度是6位小数(是点后面的数)
- double-双精度:存储大小(8个字节),值范围2.3E-308到1.7+308,精度是15位小数(是点后面的数)
-
浮点类型细节:
- 浮点型常量默认为double型,声明float型常量时,必须加‘F’或'f'
- float i = 1.1; - 就算这样声明其实也double型,必须是 float i = 1.1f;才是float型
- 不然会有这么一句话:“初始化”: 从“double”到“float”截断
- 浮点型有两种表达形式:
- 十进制:如:5.12、5.20
- 科学计数法:如:5.12e2 、5.12E-2
- 通常情况下用double型,因为精度比float高
- double可以输出15位小数,float6位,如果超过小数会数据混乱
- 输出浮点型时默认小数保存6位
- 浮点型常量默认为double型,声明float型常量时,必须加‘F’或'f'
-
//引入头文件 #include <stdio.h> void main(){ float a = 10.1; //“初始化”: 从“double”到“float”截断 float a2 = 10.2f; double b = 10.2; double b2 = .521;//等价于0.521 double c = 5.21e2;//等价5.12*(10^2) = 521 double c2 = 5.21e-2;//等价5.12*(10^-2)= 5.12/100= 0.0521 printf("b=%.15f b2=%f",b,b2);//输出默认保存6位小数,.15是15位小数 getchar(); }
-
布尔类型:
- 布尔类型作用? 代表真(true)和假(false),一般使用场景条件控制(if),循环控制(while)
- C语言(C89)没有定义布尔型,通过0代表假,非0代表真的(负整数也算)
- 因为是数字表示,非常的不直观,可以通过宏定义来完成真假操作
- C语言(C99)提供了_Bool型,_Bool型仍是整数型,接收0和非0,不是非0的数都会被存储为1
-
//引入头文件 #include <stdio.h> //使用宏定义来完成 #define BOOL int //定义BOOL为整型 #define TURE 1 //TURE等价于1 #define FALSE 0 //FALSE等价于0 void main(){ int i = 0; //0假,1真,-1真 BOOL isOK = TURE; //TURE等价于1 BOOL OKis = FALSE; //FALSE等价于0 if(OKis){ printf("i为true就输出改语句"); } getchar(); }
-
自动类型的转换:
-
什么是自动类型转换?在C语言程序中进行赋值或运算时,精度小的类型自动转换为精度大的数据类型
-
细节:
-
多个数据类型进行数据转换时,系统首先自动将所有数据转换为精度最大的数据类型(int和double进行运算,就转成double)
-
精度大的值赋值给比它小的值会造成精度丢失(如:double给float赋值)
-
两类型的字节数不同,转换成字节数大的类型,若两个类型的字节数相同,且一种由符号,一种无符号,则转换成无符号类型
-
-
-
强制转换:
- 什么是强制转换?把精度高的数据转换为精度小的数据类型
- 语法:数据类型 名称 = (数据类型) 变量或数据
-
细节:
- 高精度转低精度会照成数据流失
- 强转只对只近的的数有效,如果是对多个数据可以用()括号括起来
- 强转不是四舍五入,直接获取小数点前面的数
-
//引入头文件 #include <stdio.h> void main(){ double i = 10.99; int M = 20; int k = (int)i; //强转 int num1 = (int)3.5*10 + 6*1.5; //强制转换只对最近的有效 - 这就是对3.5发生强转 int num2 = (int)(3.5*10 + 6*1.5); // 这对求出来的结果发生强转 //k结果10,强转不是四舍五入,而是直接获取小数前面的部分 printf("k=%d i=%f",k,i);//i=10.99,i仍然是double getchar(); }
标签:变量,int,double,float,数据类型,类型 From: https://www.cnblogs.com/Mr-shne/p/16716463.html