南昌网站开发多少钱,制作网站项目流程,wordpress如何把标签去掉,贵阳网站建设费用✨个人主页#xff1a; 熬夜学编程的小林 
#x1f497;系列专栏#xff1a; 【C语言详解】 【数据结构详解】  数据类型和变量 1、数据类型介绍1.1、整型1.2、浮点型1.3、字符型1.4、布尔类型1.5、各种数据类型的长度1.5.1、sizeof操作符1.5.2、数据类型的长度1.5.3、sizeo…✨个人主页 熬夜学编程的小林 
系列专栏 【C语言详解】 【数据结构详解】  数据类型和变量 1、数据类型介绍1.1、整型1.2、浮点型1.3、字符型1.4、布尔类型1.5、各种数据类型的长度1.5.1、sizeof操作符1.5.2、数据类型的长度1.5.3、sizeof中表达式不计算  2、signed和unsigned3、数据类型和取值范围4、变量4.1、变量的创建4.2、变量的分类 5、算术操作符、-、*、/、%5.1、 和 -5.2、*5.3、/5.4、% 6、赋值操作符 和复合赋值6.1 连续赋值6.2 复合赋值符 7、单目操作符、--、、-7.1 和--7.1.1 前置7.1.2 后置7.1.3 前置--7.1.4 后置-- 7.2  和 - 8、强制类型转换总结 1、数据类型介绍 C语言提供了丰富的数据类型来描述生活中的各种数据。使用整型类型来描述整数使用字符类型来描述字符使用浮点型类型来描述小数。 所谓“类型”就是相似的数据所拥有的共同特征编译器只有知道了数据的类型才知道怎么操作数据。 下面盘点⼀下C语言提供的各种数据类型本节主要探讨内置数据类型。 基本类型又称内置类型是C语言标准指定内置于编译器中。 
1.1、整型 
//短整型
short [int]
[signed] short [int]//有符号
unsigned short [int]//无符号
//整型
int
[signed] int//有符号
unsigned int//无符号
//⻓整型
long [int]
[signed] long [int]
unsigned long [int]
//更⻓的整型
//C99中引⼊
long long [int]
[signed] long long [int]
unsigned long long [int]1.2、浮点型 
float        //单精度
double       //双精度
long double  //长精度1.3、字符型 
char          //字符型
[signed] char //有符号的字符型
unsigned char //⽆符号的字符型1.4、布尔类型 C语言原来并没有为布尔值单独设置⼀个类型而是使用整数 0 表示假非零值表示真。 在 C99 中也引入了 布尔类型 是专门表示真假的。 _Bool布尔类型的使用得包含头文件 stdbool.h 布尔类型变量的取值是 true 或者 false . #define bool _Bool //用_Bool代替bool类型
#define false 0
#define true 1代码演示 
_Bool flag  true;
if (flag)//为真则执行
printf(i like C\n);1.5、各种数据类型的长度 每⼀种数据类型都有自己的长度使用不同的数据类型能够创建出长度不同的变量变量长度的不同存储的数据范围就有所差异。 1.5.1、sizeof操作符 sizeof 是⼀个关键字也是操作符专门是用来计算sizeof的操作符数的类型长度的单位是字节。 sizeof 操作符的操作数可以是类型也可是变量或者表达式。 sizeof( 类型 )
sizeof 表达式sizeof 的操作数如果不是类型是表达式的时候可以省略掉后边的括号的。 sizeof 后边的表达式是不真实参与运算的根据表达式的类型来得出大小。 sizeof 的计算结果是 size_t 类型的。 测试  此处的%zd为无符号整数的占位符。 
sizeof 运算符的返回值C语言只规定是无符号整数并没有规定具体的类型而是留给系统自己去决定 sizeof 到底返回什么类型。不同的系统中返回值的类型有可能是unsigned int 也有可能是 unsigned long 甚至是 unsigned long long  对应的 printf() 占位符分别是 %u 、 %lu 和 %llu 。这样不利于程序的可移植性。 C语言提供了⼀个解决方法创造了⼀个类型别名 size_t 用来统⼀表示 sizeof 的返回值类型。对应当前系统的 sizeof 的返回值类型可能是 unsigned int 也可能是unsigned long long。 
比如 
#include stdio.h
int main()
{
int a  10;
printf(%zd\n, sizeof(a));
printf(%zd\n, sizeof a);//a是变量的名字可以省略掉sizeof后边的()
printf(%zd\n, sizeof(int));
printf(%zd\n, sizeof(3  3.5));
return 0;
}此处为默认的浮点数类型默认的浮点数类型为double类型所以为8字节。  
1.5.2、数据类型的长度 
#include stdio.h
int main()
{
printf(%zd\n, sizeof(char));
printf(%zd\n, sizeof(_Bool));
printf(%zd\n, sizeof(short));
printf(%zd\n, sizeof(int));
printf(%zd\n, sizeof(long));
printf(%zd\n, sizeof(long long));
printf(%zd\n, sizeof(float));
printf(%zd\n, sizeof(double));
printf(%zd\n, sizeof(long double));
return 0;
}在VS2022X64配置下的输出 
1 
1 
2 
4 
4 
8 
4 
8 
81.5.3、sizeof中表达式不计算 
//测试sizeof中表达式不计算 变量的表达式(运算会按照结果传入)
#include stdio.h
int main()
{
short s  2;
int b  10;
printf(%d\n, sizeof(s  b1));
printf(s  %d\n, s);
return 0;
}sizeof 在代码进行编译的时候就根据表达式的类型确定了返回值而表达式的执行却要在程序运行期间才能执行在编译期间已经将sizeof处理掉了所以在运行期间就不会执行表达式了。 
2、signed和unsigned 
C语言使用 signed 和 unsigned 关键字修饰字符型和整型类型的。 signed 关键字表示⼀个类型带有正负号包含负值 unsigned 关键字表示该类型不带有正负号只能表示零和正整数。  
对于 int 类型默认是带有正负号的也就是说 int 等同于 signed int 。 由于这是默认情况关键字 signed ⼀般都省略不写但是写了也不算错。 signed int a; // 等同于int a; int 类型也可以不带正负号只表示非负整数。这时就必须使用关键字 unsigned 声明变量。 unsigned int a; 整数变量声明为 unsigned 的好处是同样长度的内存能够表示的最大整数值增大了⼀倍。  
比如16位的 signed short int 的取值范围是-32768 ~ 32767最大是32767而unsigned short int 的取值范围是0~65535最大值增大到了65,535。32位的 signed int 的取值范围可以参看 limits.h 中给出的定义。 下面的定义是VS2022环境中limits.h中相关定义。 
#define SHRT_MIN (-32768) //有符号16位整型的最⼩值
#define SHRT_MAX 32767 //有符号16位整型的最⼤值
#define USHRT_MAX 0xffff //⽆符号16位整型的最⼤值
#define INT_MIN (-2147483647 - 1) //有符号整型的最⼩值
#define INT_MAX 2147483647 //有符号整型的最⼤值unsigned int 里面的 int 可以省略所以上面的变量声明也可以写成下面这样。 unsigned a; 字符类型 char 也可以设置 signed 和 unsigned 。 signed char c; // 范围为 -128 到 127 unsigned char c; // 范围为 0 到 255 注意C语言规定 char 类型默认是否带有正负号由当前系统决定。 这就是说 char 不等同于 signed char 它有可能是 signed char 也有可能是unsigned char 。 这⼀点与 int 不同 int 就是等同于 signed int 。  
3、数据类型和取值范围 
上述的数据类型很多尤其数整型类型就有short、int、long、long long四种为什么呢 其实每⼀种数据类型有自己的取值范围也就是存储的数值的最大值和最小值的区间有了丰富的类型我们就可以在适当的场景下去选择适合的类型。如果要查看当前系统上不同数据类型的极限值 
limits.h 文件中说明了整型类型的取值范围。 float.h 这个头文件中说明浮点型类型的取值范围 
为了代码的可移植性需要知道某种整数类型的极限值时应该尽量使用这些常量。 
• SCHAR_MIN  SCHAR_MAX signed char 的最小值和最大值。 • SHRT_MIN  SHRT_MAX short 的最小值和最大值。 • INT_MIN  INT_MAX int 的最小值和最大值。 • LONG_MIN  LONG_MAX long 的最小值和最大值。 • LLONG_MIN  LLONG_MAX long long 的最小值和最大值。 • UCHAR_MAX unsigned char 的最大值。 • USHRT_MAX unsigned short 的最大值。 • UINT_MAX unsigned int 的最大值。 • ULONG_MAX unsigned long 的最大值。 • ULLONG_MAX unsigned long long 的最大值。 
4、变量 
4.1、变量的创建 
了解清楚了类型我们使用类型做什么呢类型是用来创建变量的。 什么是变量呢C语言中把经常变化的值称为变量不变的值称为常量。 变量创建的语法形式是这样的 
//data_type name;|     ||     |
//数据类型 变量名int age; //整型变量
char ch; //字符变量
double weight; //浮点型变量变量在创建的时候就给⼀个初始值就叫初始化。 
int age  18;
char ch  w;
double weight  48.0;
unsigned int height  100;4.2、变量的分类 
• 全局变量在大括号外部定义的变量就是全局变量  全局变量的使用范围更广整个工程中想使用都是有办法使用的。 • 局部变量在大括号内部定义的变量就是局部变量  局部变量的使用范围是比较局限只能在自己所在的局部范围内使用的。 
#include stdio.h
int global  2023;//全局变量
int main()
{
int local  2018;//局部变量
printf(%d\n, local);
printf(%d\n, global);
return 0;
}如果局部和全局变量名字相同呢 
#include stdio.h
int n  1000;
int main()
{
int n  10;
printf(%d\n n);//打印的结果是多少呢
return 0;
}其实当局部变量和全局变量同名的时候局部变量优先使用。 
全局变量和局部变量在内存中存储在哪里呢 ⼀般我们在学习C/C语言的时候我们会关注 内存中的三个区域栈区、堆区、静态区 1. 局部变量是放在内存的栈区 2. 全局变量是放在内存的静态区 3. 堆区是用来动态内存管理的后期会介绍) 
其实内存区域的划分会更加细致以后在操作系统的相关知识的时候会介绍。  
5、算术操作符、-、*、/、% 
在写代码时候⼀定会涉及到计算。 C语言中为了方便运算提供了⼀系列操作符其中有⼀组操作符叫算术操作符。分别是  - * / % 这些操作符都是双目操作符。 注操作符也被叫做运算符是不同的翻译意思是⼀样的。 
5.1、 和 - 和 - 用来完成加法和减法。和 - 都是有2个操作数的位于操作符两端的就是它们的操作数这种操作符也叫双目操作符。 #include stdio.h
int main()
{
int x  4  22;
int y  61 - 23;
printf(%d\n, x);//打印x的值 26
printf(%d\n, y);//打印y的值 38
return 0;
}5.2、* 运算符 * 用来完成乘法。 #include stdio.h
int main()
{
int num  5;
printf(%d\n, num * num); // 输出 25
return 0;
}5.3、/ 运算符 / 用来完成除法。 除号的两端如果是整数执行的是整数除法得到的结果也是整数。 #include stdio.h
int main()
{
float x  6 / 4;
int y  6 / 4;
printf(%f\n, x); // 输出 1.000000
printf(%d\n, y); // 输出 1
return 0;
}上面示例中尽管变量 x 的类型是 float 浮点数但是 6 / 4 得到的结果是 1.0 而不是1.5 。原因就在于C语言里面的整数除法是整除只会返回整数部分丢弃小数部分。 如果希望得到浮点数的结果两个运算数必须至少有⼀个浮点数 这时C语言就会进行浮点数除法。 
#include stdio.h
int main()
{
float x  6.0 / 4; // 或者写成 6 / 4.0
printf(%f\n, x); // 输出 1.500000
return 0;
}上面示例中 6.0 / 4 表示进行浮点数除法得到的结果就是 1.5. 再看⼀个例⼦: 
#include stdio.h
int main()
{
int score  5;
score  (score / 20) * 100;
printf(%d\n, score);
return 0;
}上⾯的代码你可能觉得经过运算 score 会等于 25 但是实际上 score 等于 0 。这是因为score / 20 是整除会得到⼀个整数值 0 所以乘以 100 后得到的也是 0 。 为了得到预想的结果可以将除数 20 改成 20.0 让整除变成浮点数除法。 
#include stdio.h
int main()
{
int score  5;
score  (score / 20.0) * 100;//结果为25
printf(%d\n, score);
return 0;
}5.4、% 运算符 % 表示求模运算即返回两个整数相除的余值。这个运算符只能用于整数不能用于浮点数。  #include stdio.h
int main()
{
int x  6 % 4; // 2
printf(%d\n, x);
return 0;
}负数求模的规则是结果的正负号由第⼀个运算数的正负号决定。 
#include stdio.h
int main()
{
printf(%d\n, 11 % -5); // 1
printf(%d\n,-11 % -5); // -1
printf(%d\n,-11 % 5); // -1
return 0;
}上面示例中第⼀个运算数的正负号 11 或 -11 决定了结果的正负号。 
6、赋值操作符 和复合赋值 在变量创建的时候给⼀个初始值叫初始化在变量创建好后再给⼀个值这叫赋值。 int a  100;//初始化
a  200;//赋值这⾥使⽤的就是赋值操作符赋值操作符  是⼀个随时可以给变量赋值的操作符。 
6.1 连续赋值 赋值操作符也可以连续赋值如 int a  3;
int b  5;
int c  0;
c  b  a3;//连续赋值从右向左依次赋值的。C语言虽然支持这种连续赋值但是写出的代码不容易理解建议还是拆开来写这样方便观察代码的执行细节。 
int a  3;
int b  5;
int c  0;
b  a3;
c  b;这样写在调试的是每⼀次赋值的细节都是可以很方便的观察的. 
注调试是什么后期会详细讲解 。 
6.2 复合赋值符 
在写代码时我们经常可能对⼀个数进行自增、自减的操作如下代码: 
int a  10;
a  a3;
a  a-2;这样代码C语言给提供了更加方便的写法 
int a  10;
a  3;
a - 2;C语言中提供了复合赋值符方便我们编写代码这些赋值符有 - * / %
//下⾯的操作符后期讲解| ^注暂时只需知道有这样复合赋值符后序会详细讲解。 
7、单目操作符、–、、- 前面介绍的操作符都是双目操作符有2个操作数的。C语言中还有⼀些操作符只有⼀个操作数被称为单目操作符。 、–、(正)、-(负) 就是单目操作符的。 7.1 和– 是⼀种自增的操作符又分为前置和后置–是⼀种自减的操作符也分为前置–和后置–. 7.1.1 前置 
int a  10;
int b  a;//的操作数是a是放在a的前⾯的就是前置
printf(a%d b%d\n,a , b);计算口诀先1后使用 a原来是10先1后a变成了11再使用就是赋值给bb得到的也是11所以计算结束后a和b都是11相当于这样的代码 
int a  10;
a  a1;
b  a;
printf(a%d b%d\n,a , b);7.1.2 后置 
int a  10;
int b  a;//的操作数是a是放在a的后⾯的就是后置
printf(a%d b%d\n,a , b);计算口诀先使用后1 a原来是10先使用就是先赋值给bb得到了10然后再1然后a变成了11所以计算结束后a是11b是10相当于这样的代码 
int a  10;
int b  a;
a  a1;
printf(a%d b%d\n,a , b);7.1.3 前置– 
如果你听懂了前置那前置–是同理的只是把加1换成了减1 计算口诀先-1后使用 
int a  10;
int b  --a;//--的操作数是a是放在a的前⾯的就是前置--
printf(a%d b%d\n,a , b);//输出的结果是9 97.1.4 后置– 
同理后置–类似于后置只是把加⼀换成了减⼀ 计算口诀先使用后-1 
int a  10;
int b  a--;//--的操作数是a是放在a的后⾯的就是后置--
printf(a%d b%d\n,a , b);//输出的结果是9 107.2  和 - 这里的是正号-是负号都是单目操作符。 运算符  对正负值没有影响是⼀个完全可以省略的运算符但是写了也不会报错。 int a  10; 等价于 int a  10;运算符 - 用来改变⼀个值的正负号负数的前面加上 - 就会得到正数正数的前⾯加上 - 会得到负数。 
int a  10;
int b  -a;
int c  -10;
printf(b%d c%d\n, b, c);//这⾥的b和c都是-10
int a  -10;
int b  -a;
printf(b%d\n, b); //这⾥的b是108、强制类型转换 在操作符中还有⼀种特殊的操作符是强制类型转换语法形式很简单形式如下 (类型)请看代码 
int a  3.14;
//a的是int类型, 3.14是double类型两边的类型不⼀致编译器会报警告为了消除这个警告我们可以使用强制类型转换 
int a  (int)3.14;//意思是将3.14强制类型转换为int类型这种强制类型转换只取整数部分俗话说强扭的瓜不甜我们使用强制类型转换都是万不得已的时候使用如果不需要强制类型转化就能实现代码这样自然更好的。 
总结 
本篇博客就结束啦谢谢大家的观看如果公主少年们有好的建议可以留言喔谢谢大家啦 文章转载自: http://www.morning.ymfzd.cn.gov.cn.ymfzd.cn http://www.morning.fmswb.cn.gov.cn.fmswb.cn http://www.morning.rwxnn.cn.gov.cn.rwxnn.cn http://www.morning.hjsrl.cn.gov.cn.hjsrl.cn http://www.morning.ygxf.cn.gov.cn.ygxf.cn http://www.morning.mrxgm.cn.gov.cn.mrxgm.cn http://www.morning.ljbm.cn.gov.cn.ljbm.cn http://www.morning.pbzgj.cn.gov.cn.pbzgj.cn http://www.morning.bnrff.cn.gov.cn.bnrff.cn http://www.morning.mqzcn.cn.gov.cn.mqzcn.cn http://www.morning.spxsm.cn.gov.cn.spxsm.cn http://www.morning.hpjpy.cn.gov.cn.hpjpy.cn http://www.morning.xhsxj.cn.gov.cn.xhsxj.cn http://www.morning.wpcfm.cn.gov.cn.wpcfm.cn http://www.morning.sgwr.cn.gov.cn.sgwr.cn http://www.morning.hlkxb.cn.gov.cn.hlkxb.cn http://www.morning.gftnx.cn.gov.cn.gftnx.cn http://www.morning.xcjbk.cn.gov.cn.xcjbk.cn http://www.morning.ynwdk.cn.gov.cn.ynwdk.cn http://www.morning.lbfgq.cn.gov.cn.lbfgq.cn http://www.morning.rwmft.cn.gov.cn.rwmft.cn http://www.morning.qxdrw.cn.gov.cn.qxdrw.cn http://www.morning.tnbas.com.gov.cn.tnbas.com http://www.morning.cfcpb.cn.gov.cn.cfcpb.cn http://www.morning.rhdln.cn.gov.cn.rhdln.cn http://www.morning.qgfy.cn.gov.cn.qgfy.cn http://www.morning.nqxdg.cn.gov.cn.nqxdg.cn http://www.morning.lbhck.cn.gov.cn.lbhck.cn http://www.morning.nbqwr.cn.gov.cn.nbqwr.cn http://www.morning.gwqcr.cn.gov.cn.gwqcr.cn http://www.morning.tdldh.cn.gov.cn.tdldh.cn http://www.morning.gnkdp.cn.gov.cn.gnkdp.cn http://www.morning.pmdlk.cn.gov.cn.pmdlk.cn http://www.morning.rqrh.cn.gov.cn.rqrh.cn http://www.morning.wsxly.cn.gov.cn.wsxly.cn http://www.morning.wqpb.cn.gov.cn.wqpb.cn http://www.morning.grlth.cn.gov.cn.grlth.cn http://www.morning.jqmmf.cn.gov.cn.jqmmf.cn http://www.morning.ypzr.cn.gov.cn.ypzr.cn http://www.morning.wtdhm.cn.gov.cn.wtdhm.cn http://www.morning.kwfnt.cn.gov.cn.kwfnt.cn http://www.morning.jhzct.cn.gov.cn.jhzct.cn http://www.morning.jqmqf.cn.gov.cn.jqmqf.cn http://www.morning.kchwr.cn.gov.cn.kchwr.cn http://www.morning.bplqh.cn.gov.cn.bplqh.cn http://www.morning.jhkzl.cn.gov.cn.jhkzl.cn http://www.morning.ckhyj.cn.gov.cn.ckhyj.cn http://www.morning.mnbcj.cn.gov.cn.mnbcj.cn http://www.morning.rbqlw.cn.gov.cn.rbqlw.cn http://www.morning.mxftp.com.gov.cn.mxftp.com http://www.morning.jcjgh.cn.gov.cn.jcjgh.cn http://www.morning.qcztm.cn.gov.cn.qcztm.cn http://www.morning.mkkcr.cn.gov.cn.mkkcr.cn http://www.morning.bgpb.cn.gov.cn.bgpb.cn http://www.morning.jjzbx.cn.gov.cn.jjzbx.cn http://www.morning.lchtb.cn.gov.cn.lchtb.cn http://www.morning.dmwck.cn.gov.cn.dmwck.cn http://www.morning.smyxl.cn.gov.cn.smyxl.cn http://www.morning.ptmsk.cn.gov.cn.ptmsk.cn http://www.morning.psqs.cn.gov.cn.psqs.cn http://www.morning.ggxbyhk.cn.gov.cn.ggxbyhk.cn http://www.morning.yppln.cn.gov.cn.yppln.cn http://www.morning.cybch.cn.gov.cn.cybch.cn http://www.morning.kryxk.cn.gov.cn.kryxk.cn http://www.morning.zqwp.cn.gov.cn.zqwp.cn http://www.morning.qbfwb.cn.gov.cn.qbfwb.cn http://www.morning.wdhlc.cn.gov.cn.wdhlc.cn http://www.morning.pwsnr.cn.gov.cn.pwsnr.cn http://www.morning.dcccl.cn.gov.cn.dcccl.cn http://www.morning.rjynd.cn.gov.cn.rjynd.cn http://www.morning.dmkhd.cn.gov.cn.dmkhd.cn http://www.morning.dnvhfh.cn.gov.cn.dnvhfh.cn http://www.morning.ndtzy.cn.gov.cn.ndtzy.cn http://www.morning.hfbtt.cn.gov.cn.hfbtt.cn http://www.morning.mjxgs.cn.gov.cn.mjxgs.cn http://www.morning.swbhq.cn.gov.cn.swbhq.cn http://www.morning.zffps.cn.gov.cn.zffps.cn http://www.morning.ptqds.cn.gov.cn.ptqds.cn http://www.morning.ybmp.cn.gov.cn.ybmp.cn http://www.morning.gnyhc.cn.gov.cn.gnyhc.cn