二:C语言-数据类型和变量

二:数据类型和变量

1.数据类型的介绍:

​ 内置数据类型(C语言本身具有的):字符 - char;整型 - int;浮点型 - float;布尔类型 - _Bool

​ 自定义数据类型(自己创建的类型):数组;结构体 - struct;枚举 - enum;联合体 - union

(1)字符类型:字符类型分为三类

1. char //字符类型
2. signed char //有符号的字符类型
3. unsigned char //无符号的字符类型

(2)整型:整型分为四大类

//整型
1. int //整数类型
2. [signed] int //有符号的整型
3. unsigned [int] //无符号的整型
//短整型
1. short [int] //短整型
2. [signed] short [int] //有符号的短整型
3. unsigned short [int] //无符号的短整型
//长整型
1. long [int] //长整型
2. [signed] long [int] //有符号的长整型
3. [unsigned] long [int] //无符号的长整型
//更长的整型
1. long long [int] //长长整型
2. [signed] long long [int] //有符号的长长整型
3. unsigned long long [int] //无符号的长长整型

注意: 以上用 [ ] 包裹的内容,在编写代码时都可以省略不写

(3)浮点型(小数):浮点型分为三类

1. float //单精度浮点型
2. double //双精度浮点型(精度比较高)
3. long double //精度更高的浮点型

(4)布尔类型:在C语言最开始的时候,用0来表示假,而非0则表示真,后来在 C99 标准中引入了布尔类型

​ 在使用布尔类型时还要包含头文件 <stdbool.h>

​ 布尔类型变量的取值只有两种:true或者false

1. _Bool //布尔类型
#include <stdio.h>
#include <stdbool.h>
int main()
{_Bool flag = true;if(flag)printf("I Like You\n");return 0;
}
2.signed 和 unsigned:
  • ​ 在C语言中,signedunsigned 两个关键字是用来修饰字符型和整型的
  • signed 关键字,表示一个类型带有正负号,包含负值
  • unsigned 关键字,表示该类型不带有正负号,只能表示0和正整数
  • ​ 对于 int 类型,默认是带正负号的,也就是 int 等同于 signed int,所以 signed 可以省略不写
int main()
{signed int temperature1 = 30; //temperature表示温度,而温度会有负数的可能性,所以用signed修饰signed int temperature2 = -30;unsigned int age = 20; //age表示年龄,而年龄未来只有正数的可能性,所以用unsigned去修饰return 0}

注意: 1.当表示非负整数时,这时必须使用 unsigned 去声明变量

​ 2.整数变量声明为 unsigned 的好处是,同样长度的内存能够表示最大的整数值增大了一倍

​ 3.整数类型的取值范围可以参考 limits.h 中给出的定义

//字符类型的取值范围
1. signed char a; //取值范围为 -128~127
2. unsigned char a; //取值范围为 0~255

注意: C语言规定 char 类型是否带有正负号,由当前系统决定,也就是说 char 不等同于 signed char,它有可能是 signed char,也有可能是 unsigned char;这一点与 int 不同

3.数据类型的取值范围:

​ 每一种数据类型都有自己的取值范围,也就是存储数值的最大和最小值的区间

查看当前的系统上不同数据类型的取值:

​ limits.h 这个头文件中说明了整数类型的取值范围

​ float.h 这个头文件中说明了浮点类型的取值范围

​ 为了代码的可移植性,当需要知道某种数据类型的极限值时,尽量使用这些常量:

常量描述
SCHAR_MIN;SCHAR_MAXsigned char 的最小值和最大值
SHRT_MIN;SHRT_MAXshort 的最小值和最大值
INT_MIN;INT_MAXint 的最小值和最大值
LONG_MIN;LONG_MAXlong 的最小值和最大值
LLONG_MIN;LLONG_MAXlong long 的最小值和最大值
UCHAR_MAXunsigned char 的最大值
USHAR_MAXunsigned short 的最大值
UINT_MAXunsigned int 的最大值
ULONG_MAXunsigned long 的最大值
ULLONG_MAXunsigned long long 的最大值

​ *注意:*在使用这些常量时记得包含头文件

操作符 sizeof():计算的是类型创建的变量所占内存的大小,单位是字节

size_t 是专门为 sizeof() 设置的一个类型,size_t 的本质是 unsigned int

注意: size_t 类型的数据在打印的时候格式应该使用 %zd

int main()
{printf("%zd\n",sizeof(char));printf("%zd\n",sizeof(short));printf("%zd\n",sizeof(int));printf("%zd\n",sizeof(long long));printf("%zd\n",sizeof(float));printf("%zd\n",sizeof(double));return 0;
}
//C语言标准规定:sizeof(long) >= sizeof(int)

注意: 计算机中常见的单位:(由小到大排序)

​ bit – 比特位 – 当存储一个二进制位(1或0)的时候所需要的空间就是一个比特位

​ Byte – 字节 – 1Byte == 8bit

​ KB – 1KB == 1024Byte

​ MB – 1MB == 1024KB

​ GB – 1GB == 1024MB

​ TB – 1TB == 1024GB

​ PB – 1PB == 1024TB


4.变量:

(1)变量的创建

​ C语言中把经常变化的值称为变量,不变的值称为常量,类型就是用来创建变量的

创建变量的语法格式:数据类型 变量名;
date_type name;

//变量的创建
#include <stdio.h>
int main()
{int age; //整型变量char str; //字符变量float heigh; //浮点型变量return 0;
}

​ 变量在创建的时候给一个初始值,就叫初始化

//变量的初始化
#include <stdio.h>
int main()
{int age = 18;char str = "你猜";float heigh = 3.14159; //编译器会自动把它识别成double类型的数字,容易出现警告float heigh = 3.14159f; //此时在值的后面加上一个f,编译器会自动把它识别成float类型的数字return 0;
}

(2)变量的分类

全局变量: 在大括号外部定义的变量就是全局变量,全局变量的使用范围广,在整个工程中想使用,都是有办法使用的

局部变量: 在大括号内部定义的变量就是局部变量,局部变量的使用范围比较局限,只能在自己所在的局部范围内使用

#include <stdio.h>
float a = 3.1234f; //全局变量,这个a可以在整个项目工程中使用
int main()
{int b = 10; //局部变量,这个b仅限于main()函数内部使用{char c = "你猜" //这个c仅限于这个小括号中使用}return 0;
}

注意: 全局变量与局部变量重名时,局部变量会优先使用


注意: 1.局部变量是放在内存的栈区

​ 2. 全局变量是放在内存的静态区

​ 3. 堆区是用来动态内存管理的


5.算术操作符:

​ 算术操作符,因为其操作符的左右两端都各有一个操作数,所以也叫做双目操作符,操作符也叫运算符

(1)加法 + 和减法 -

#include <stdio.h>
int main()
{int a = 34 + 78;float b = 45.7 - 30.3;int c = a + b; //变量之间也可以相加减printf("%d\n",a);printf("%d\n",b);printf("%d\n",c);reyurn 0;
}

(2)乘法 *

#include <stdio.h>
int main()
{int a = 23 * 78;printf("%d\n",a);return 0;
}

(3)除法(整数除法,只要整数不要余数) /

#include <stdio.h>
int main()
{int a = 7 / 2; //结果为3printf("%d\n",a);return 0;
}

注意: 1.除号两端如果都是整数,则执行整数除法,得到的结果也是整数,舍弃余数

​ 2.除号两端只要有浮点数,此时则执行浮点数除法

#include <stdio.h>
int main()
{int a = 7.0f / 2;printf("%d\n",a);return 0;
}

(4)取模 %

#include <stdio.h>
int main()
{int a = 23 % 78;printf("%d\n",a);`return 0;
}

注意: 1.取模返回的是两个整数相除的余数,且取模只能用于整数,不能用于浮点数

​ 2.当进行负数取模时,结果的正负号由第一个操作数的正负号决定

#include <stdio.h>
int main()
{int a = -23 % 78; //此时结果是负数int b = 8 % -2; //此时结果是正数printf("%d\n",a);printf("%d\n",b);return 0;
}
6.赋值操作符:

​ 在变量创建时,给一个值叫做初始化;在变量创建好后,再给一个值,这叫赋值,赋值符号:=

#include <stdio.h>
int main()
{int a = 20; //初始化a = 40; //赋值return 0;
}

(1)连续赋值:

#include <stdio.h>
int main()
{int a = 20; //初始化int b = 40;int c = 78;c = b = c + a + 4; //连续赋值,从右到左依次赋值printf("%d\n",c);return 0;
}

(2)复合赋值(自增;自减):

#include <stdio.h>
int main()
{int a = 20; //初始化a = a + 3; //可以将其替换成 a += 3;a = a - 4; //可以将其替换成 a -= 2;printf("%d\n",a);return 0;
}
7.单目操作符:

​ 在C语言中一些操作符只有一个操作数,而这些操作符被称为单目操作符

(1)++--

++是一种自增1的操作符,又分为前置++和后置++

--是一种自减的1操作符,又分为前置--和后置--

//前置++或--:先++或--,后使用
#include <stdio.h>
int main()
{int a = 29;int b = ++a; //先 a = a + 1;再 b = aprintf("%d\n",a); //结果为30printf("%d\n",b); //结果为30return 0;
}
#include <stdio.h>
int main()
{int a = 29;int b = --a; //先 a = a - 1;再 b = aprintf("%d\n",a); //结果为28printf("%d\n",b); //结果为28return 0;
}
//后置++或--:先使用,再进行++或--
#include <stdio.h>
int main()
{int a = 29;int b = a++; //先 b = a;再 a = a + 1printf("%d\n",a); //结果为30printf("%d\n",b); //结果为29return 0;
}
#include <stdio.h>
int main()
{int a = 29;int b = a--; //先 b = a;再 a = a - 1printf("%d\n",a); //结果为28printf("%d\n",b); //结果为29return 0;
}

(2)+-

​ 这里是正号和负号,都是单目操作符

​ 操作符 + 对正负值没有影响,是一个可以省略的符号;

​ 操作符 - 是用来改变一个值的正负,负数前加上 - 就会得到正数;正数前加上 - 会得到负数

#include <stdio.h>
int main()
{int a = +10; //等同于 int a = 10;int b = -20;int c = -b; //等同于 c = 20;printf("%d\n",c);return 0;
}
8.强制类型转换:

​ 强制类型转换是操作符中一种特殊的操作符

语法格式:(类型) – 想强制转换成什么类型就在括号里写上什么类型

#include <stdio.h>
int main()
{int a = (int)3.1415; //结果为3,将double类型强制转换成int类型printf("%d\n",a);return 0;
}

注意: 强扭的瓜不甜

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/202227.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

选择更好的Notes索引附件方式

大家好&#xff0c;才是真的好。 首先介绍最近产品更新消息。在上一周&#xff0c;HCL主要发布了以下几个产品更新&#xff1a;HCL Verse 3.2.0、HCL Volt MX Go 2.0.2、HCL Domino Rest API 1.0.8。 HCL Verse是今后Domino的产品当中主要使用的webmail功能&#xff0c;这一次…

kafka学习笔记--基础知识概述

本文内容来自尚硅谷B站公开教学视频&#xff0c;仅做个人总结、学习、复习使用&#xff0c;任何对此文章的引用&#xff0c;应当说明源出处为尚硅谷&#xff0c;不得用于商业用途。 如有侵权、联系速删 视频教程链接&#xff1a;【尚硅谷】Kafka3.x教程&#xff08;从入门到调优…

【开题报告】基于SpringBoot的农场管理系统的设计与实现

1.选题背景 随着社会经济的发展和人们对食品安全和质量的要求不断提高&#xff0c;农业管理也面临着新的挑战和需求。传统的农场管理方式往往依靠手工记录和经验积累&#xff0c;存在信息不及时、管理效率低下等问题。而基于SpringBoot的农场管理系统的设计与实现&#xff0c;…

国标GB28181设备注册安防监控平台EasyCVR不上线是什么原因?

安防视频监控EasyCVR平台兼容性强&#xff0c;可支持的接入协议众多&#xff0c;包括国标GB28181、RTSP/Onvif、RTMP&#xff0c;以及厂家的私有协议与SDK&#xff0c;如&#xff1a;海康ehome、海康sdk、大华sdk、宇视sdk、华为sdk、萤石云sdk、乐橙sdk等。平台能将接入的视频…

[头歌Python实验]Python入门之基础语法

目录 第1关&#xff1a;行与缩进 第2关&#xff1a;标识符与保留字 第3关&#xff1a;注释 第4关&#xff1a;输入输出 如果对你有帮助的话&#xff0c;不妨点赞收藏关注评论走一波吧&#xff0c;爱你么么哒吗&#x1f618;&#x1f496;&#x1f496;&#x1f496; 第1关…

逆向爬虫进阶实战:突破反爬虫机制,实现数据抓取

文章目录 一、引言二、逆向爬虫进阶技巧三、逆向爬虫进阶实战代码片段四、总结与展望好书推荐内容简介作者简介前言节选 一、引言 随着网络技术的发展&#xff0c;网站为了保护自己的数据和资源&#xff0c;纷纷采用了各种反爬虫机制。然而&#xff0c;逆向爬虫技术的出现&…

【Python百宝箱】漫游Python数据可视化宇宙:pyspark、dash、streamlit、matplotlib、seaborn全景式导览

Python数据可视化大比拼&#xff1a;从大数据处理到交互式Web应用 前言 在当今数字时代&#xff0c;数据可视化是解释和传达信息的不可或缺的工具之一。本文将深入探讨Python中流行的数据可视化库&#xff0c;从大数据处理到交互式Web应用&#xff0c;为读者提供全面的了解和…

控乐屋品牌|智汇恒星全宅智能空间万物互联,千亿蓝海蓄势待发

随着5G、大数据、云计算、物联网等技术的发展&#xff0c;智能化正覆盖人们生活的方方面面&#xff0c;全屋智能的出现为“一键式”智能家居生活享受提供无限可能。近年来智能家居行业总体规模增长迅速&#xff0c;数据显示&#xff0c;2022年中国智能家居行业市场规模约为6200…

Redis滚动分页的使用

Feed流 关注推送也叫Feed流。通过无限下拉刷新获取新的信息。 Feed流产品常见有两种模式&#xff1a; Timeline: 不做内容筛选&#xff0c;简单的按照内容发布时间排序&#xff0c;常用于好友或关注。例如朋友圈 优点&#xff1a;信息全面&#xff0c;不会有缺失。并且实现也…

2023五岳杯量子计算挑战赛APMCM亚太地区

问题一要求在特定区域内部署两个边缘服务器&#xff0c;以便根据计算需求分布覆盖最大的计算需求。每个边缘服务器都有一个覆盖半径为1。目标是确定两个边缘服务器的位置&#xff0c;以覆盖最大的计算需求。假设边缘服务器的位置位于网格的中心&#xff0c;每个网格内的计算需求…

我们为什么那么关注 Java 中的 String Template ,Java 21 特性

本心、输入输出、结果 文章目录 我们为什么那么关注 Java 中的 String Template &#xff0c;Java 21 特性前言String TemplateString Template 有什么好处字符串连接 – 一个常见但无趣且容易出错的任务jetbrains IDEA 2023.2 版本及以上对于 String Template 的支持字符串模板…

试编写算法将带头结点的单链表就地逆置(就地是指辅助空间复杂度为 O(0))。

题目描述&#xff1a;试编写算法将带头结点的单链表就地逆置&#xff08;就地是指辅助空间复杂度为 O(0)。 分析&#xff1a; 将单链表就地逆置可以考虑使用头插法。 LinkList Reverse(LinkList L){LNode *p L->next;LNode *r;L->next NULL;while(p){r p->next;p…

redis中使用pipeline

在操作数据库时&#xff0c;为了加快程序的执行速度&#xff0c;在新增或更新数据时&#xff0c;可以通过批量提交的方式来减少应用和数据库间的传输次数&#xff1b;在redis中也有这样的技术实现批量处理&#xff0c;也就是管道——Pipeline。它也是通过批量提交数据的方式来实…

FPS和SFTP的速度哪个更快?区别在哪里?

在互联网时代&#xff0c;我们频繁需要传输大文件&#xff0c;如视频、音乐、图片和文档等。这些文件不仅占用大量空间&#xff0c;而且传输时间长。确保传输过程的安全性和稳定性&#xff0c;以防文件被窃取或损坏成为重要考虑因素。在选择传输方式时&#xff0c;FPS和SFTP是两…

力扣-435.无重叠空间

利用快排&#xff0c;对数组右边界进行排序。 用一个变量记录区间的分割点&#xff0c;然后用这个分割点去和下一个区间做比较&#xff0c;如果没有重叠&#xff0c;更新右边界&#xff0c;没有重叠的区间个数加一。 然后更新右边界&#xff0c;继续进行比较。 最后用总区间…

Databend 如何利用 GPT-4 进行质量保证

背景 在数据库行业&#xff0c;质量是核心要素。 Databend 的应用场景广泛&#xff0c;特别是在金融相关领域&#xff0c;其查询结果的准确性对用户至关重要。因此&#xff0c;在快速迭代的过程中&#xff0c;如何确保产品质量&#xff0c;成为我们面临的重大挑战。 随着 Da…

leaflet:经纬度坐标转为地址,点击鼠标显示地址信息(137)

第137个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中将经纬度坐标转化为地址,点击鼠标显示某地的地址信息 。主要利用mapbox的api将坐标转化为地址,然后在固定的位置显示出来。 直接复制下面的 vue+leaflet源代码,操作2分钟即可运行实现效果 文章目录 示…

Springboot 项目关于版本升级到 3.x ,JDK升级到17的相关问题

由于spring 停止对2.x 版本的维护&#xff0c;以及 jdk 频繁发布等客观因素&#xff0c;现需要对已有springboot 工程做一次全面升级&#xff1b;已因对市面上第三方等依赖库的兼容问题&#xff1b; 现有工程使用哥技术栈是版本&#xff1a; freemarker &#xff1a;2.3.32 spr…

Segment Anything--SAM框架(二)

文章目录 prologuepaper && codeImage encoderPrompt encoderLightweight mask decoderMaking the model ambiguity-aware prologue 没什么事&#xff0c;写一写SAM的paper中关于模型框架的部分和实际代码部分。 paper && code SAM有三个组件&#xff0c;如图…

要求CHATGPT高质量回答的艺术:提示工程技术的完整指南—第 9 章:种子词提示

要求CHATGPT高质量回答的艺术&#xff1a;提示工程技术的完整指南—第 9 章&#xff1a;种子词提示 种子词提示是一种通过提供特定种子词或短语来控制 ChatGPT 输出的技术。 种子词提示符的提示公式是种子词或短语&#xff0c;然后是指令 “请根据以下种子词生成文本”。 示…