ToB企服应用市场:ToB评测及商务社交产业平台
标题:
变量 + 数据类型
[打印本页]
作者:
王柳
时间:
2022-10-4 19:46
标题:
变量 + 数据类型
变量:
什么是变量?一个可以存储数据(存储的地方在内存中),并可以在代码的运行中,给与数据的改变
注意:变量的声明必须在最前面
语法:数据类型 变量名称 = 值;
案例:
%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
浮点类型:
浮点数的作用?用来表示一个小数,如: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位
//引入头文件
#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();
}
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4