当前位置: 首页 > article >正文

【C#学习笔记02】基本元素与数据类型

引言

深入了解C语言的基本元素、计算机存储器结构、常量与变量的概念以及数据类型。这些内容是C语言编程的基础,掌握它们对于编写高效、可靠的嵌入式程序至关重要。


1.C语言的基本元素

​编程语言的发展离不开自然语言,所以编程语言的语法和词汇也是由自然语言发展而来,而自然语言的基础是文字,举个例子:想要学会汉语,则必须先学会汉字,想要学会英语,则必须先学会单词,通过下图可以知道,想要学会C语言,必须先学会关键字。

完成一个程序设计的过程就相当于是完成一篇文章的编写,而一篇文章(程序)是由多个段落(函数)构成的,一个段落(函数)是由多个句子(语句)构成的,一个句子(语句)是由多个短语(表达式)构成的,一个短语(表达式)是由多个单词(标识符)构成的,一个单词(标识符)是由多个文字(字符)组成的。

C语言程序由一系列基本元素构成,这些元素包括:

  • 字符集:C语言支持的基本字符,包括字母、数字、特殊符号(如​​+​​、​​-​​、​​*​​等)。
  • 关键字:C语言中具有特殊含义的保留字,如​​int​​、​​return​​、​​if​​等。
  • 标识符:由程序员定义的名称,用于表示变量、函数、数组等。
  • 运算符:用于执行操作的符号,如算术运算符(​​+​​、​​-​​)、关系运算符(​​>​​、​​<​​)等。
  • 分隔符:用于分隔代码元素的符号,如分号(​​;​​)、逗号(​​,​​)等。
#include <stdio.h>int main() {int a = 10;  // int是关键字,a是标识符int b = 20;int sum = a + b;  // +是运算符printf("Sum: %d\n", sum);  // ;是分隔符return 0;
}

可以看到,C语言标准中常用的关键字只有32个,并且这些关键字都是小写的,并且都是某些英文单词的缩写。 int -- integer   char -- character 


2. 计算机存储器结构

数据概念

数据是计算机处理的基本单位,可以是数字、字符、布尔值等。在C语言中,数据通过变量和常量来表示。人类使用计算机的目的就是为了高效的处理大量数据,但是数据的类型有很多,比如声音、图像、文字、数字等,那计算机是如何区分数据的呢? 回答:计算机不用区分,计算机只采用二进制存储。


内存概念

内存是计算机用于存储数据和程序的硬件设备。每个内存单元都有一个唯一的地址,程序通过地址访问内存中的数据。

对于计算机中的存储器而言,一般分为两种:RAM(随机存储器)ROM(只读存储器)  

(1) 只读存储器

只读存储器的英文全称是Read Only Memory,简称为ROM,属于非易失性存储设备,指的是掉电不丢失数据,可以把数据长时间存储,一般分为很多种,具体的区别可以通过《数电》进行了解,对于计算机的机械硬盘或者固态硬盘而言指的就是ROM。

(2) 随机存储器

随机存储器的英文全称是Random Access Memory,简称为RAM,属于易失性存储设备,指的是掉电会丢失数据,但是读写速度很快。所以一般CPU都是直接和RAM打交道。


内存单位

内存中一个MOS管可以存储一个二进制数0或1,为了方便记忆,标准规定把一个二进制数用bit来进行表示,bit(比特)是binary digit的缩写,中文翻译为。专业术语一般把一个二进制数称为一位二进制数。所以bit就用来表示计算机数据的最小单位。

注意计算机处理数据的基本单位是byte,计算机处理数据的最小单位是bit,1byte = 8bit。

内存的单位从小到大依次为:

  • 位(Bit):最小的存储单位,表示一个二进制位(0或1)。
  • 字节(Byte):8位组成一个字节,是内存的基本单位。
  • 千字节(KB):1024字节。
  • 兆字节(MB):1024千字节。
  • 吉字节(GB):1024兆字节。

#include <stdio.h>int main() {int a = 10;  // 假设int类型占4个字节printf("Size of a: %lu bytes\n", sizeof(a));  // 输出a占用的内存大小return 0;
}

3. C语言的常量与变量

C语言采用常量(Constant)和变量(Variable)作为数据存储的基本单元。从内存管理的角度来看,内存是由连续编址的存储单元构成的物理空间,每个存储单元(8位)都具有唯一的地址标识。虽然理论上可以通过直接寻址方式访问这些存储单元,但由于效率考量,实践中通常采用更高级的抽象访问机制。

根据C语言规范,开发者享有动态内存申请权限。申请过程需遵循以下协议:

  1. 显式声明所需内存空间的大小(以字节为单位)
  2. 内核负责在物理内存中定位合适的连续空间
  3. 系统将分配的内存首地址返回给申请者

为提升内存访问效率,C语言引入了符号化访问机制:

  • 开发者可为分配的内存空间指定标识符
  • 系统维护符号名与物理地址的映射关系
  • 通过符号名实现间接内存访问

基于数据可变性特征,C语言将存储单元划分为两种类型:

  1. 常量(Constant):程序运行期间值不可变
  2. 变量(Variable):程序运行期间值可变

常量

​常量指的是在程序运行期间值不会发生改变的量,一般使用的数字,比如3.14用来表示圆周率,一般情况下,用户都是用通过宏定义的方式来实现常量的设计,宏定义其实就是简单的文本替换,在预处理阶段预处理器会把程序中的宏定义进行展开。C语言中规定宏定义使用预处理指令 #define 来进行设计。

常量是程序运行过程中值不会改变的数据。常量可以分为以下几种:

  • 整型常量:如​​10​​、​​-20​​。
  • 浮点型常量:如​​3.14​​、​​-0.5​​。
  • 字符常量:如​​'A'​​、​​'1'​​。
  • 字符串常量:如​​"Hello, World!"​​。

变量

变量是程序运行过程中值可以改变的数据。变量指的是在程序运行期间值可能发生变化的量,用户可以根据实际需要来向kernel申请一块存储单元,并对这块存储单元进行命名,然后用户可以随时修改存储单元中的数据。申请的存储单元的大小可以通过C语言中的数据类型进行指定。

命名规则

变量和常量的命名需要遵循以下规则:

  • 只能包含字母、数字和下划线(​​_​​)。
  • 不能以数字开头。
  • 不能使用C语言关键字。
  • 区分大小写。

注意为了防止二义性出现,C语言标准规定不可以把系统保留字,以及程序中已经存在的函数名称、以及用户已经定义出来的标识符名称作为新的标识符名称(同一个作用域内不能)。  

另外C语言的标识符是区分大小写,并且作为用户而言,标识符的命名应该是有意义的

int myVariable;  // 合法
int _value;      // 合法
int 1value;      // 非法,不能以数字开头
int return;      // 非法,return是关键字

4. C语言的数据类型

C语言提供了丰富的数据类型,用于表示不同类型的数据。以下是常见的数据类型:


字符型(​​char​​)

字符型用于存储单个字符,占用1个字节。C语言标准中提供了一个关键字 char ,其实是 character 单词的缩写,表示字符的意思,操作系统char类型的数据宽度定义为1字节,用于存储字符,C语言标准中用单撇号’ ’表示字符。

C语言标准规定:用户打算存储字符   数据宽度  变量名称 ;  举例: char  ch  =  ‘c’ ;

C语言标准中关于字符的种类有两种:普通字符 and 转义字符,对于ASCII码表中转义字符

注意ASCII码中的转义字符需要使用 ‘\0’  ‘\r’  ‘\n’进行表示,代表字符具有特殊的意义分别表示:空格、换行和回车。

#include <stdio.h>int main() {char letter = 'A';printf("%c\n", letter);return 0;
}

输出

A

整数型(​​int​​)

C语言标准中使用关键字int表示整数,整数型用于存储整数值,通常占用4个字节,关键字 int 的英文单词是 integer ,对应的中文具有整数的含义,在32系统下关键字int的数据宽度是4字节,也就意味着存储单元所能存储的整数范围比较广泛。

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

输出

100

短整型(​​short​​)

C语言标准中规定使用关键字 short 来表示短整型,短整型用于存储较小的整数值,通常占用2个字节。一般短整型的全称是 short int ,只不过写程序的时候可以只写 short 即可,在32位系统下 short 短整型占2字节。

#include <stdio.h>int main() {short smallNumber = 32767;printf("%d\n", smallNumber);return 0;
}

输出

32767

长整型(​​long​​)

C语言标准中规定使用关键字 long 来表示长整型,长整型用于存储较大的整数值,通常占用4个或8个字节。一般长整型的全称是 long int ,只不过写程序的时候可以只写long即可,在32位系统下 long 长整型占4字节,在64位系统占8字节。

#include <stdio.h>int main() {long bigNumber = 2147483647;printf("%ld\n", bigNumber);return 0;
}

输出

2147483647

长长整型(​​long long​​)

C语言标准中规定使用关键字 long long 来表示长长整型,长长整型用于存储非常大的整数值。但是长长整型是使用 long long 来表示,在32位和64位系统下长长整型占8字节。

#include <stdio.h>int main() {long long hugeNumber = 9223372036854775807;printf("%lld\n", hugeNumber);return 0;
}

输出

9223372036854775807

浮点型(​​float​​和​​double​​)

数据有整数和小数之分,一般情况下处理的数据也是具有小数的,所以C语言标准中规定使用关键字 float 来表示单精度浮点数,单精度浮点型占4字节,另外C语言标准中也提供了另一个关键字 double 用来表示双精度浮点数,double 占8字节,其实C语言也提供了一种类型 long double,该类型占16字节。

#include <stdio.h>int main() {float pi = 3.14;double precisePi = 3.1415926535;printf("%f\n", pi);printf("%f\n", precisePi);return 0;
}

输出

3.14
3.1415926535

字符串

字符串是表示某种含义的一个字符序列,字符串在内存是需要一块连续的内存空间进行存储,C语言中规定字符串使用双引号””表示,并且规定字符串的结束标志是’\0’,但’\0’不需要用户手动添加,系统会自动在一个字符串的末尾添加’\0’

#include <stdio.h>int main() {char name[] = "Alice";printf("%s\n", name);return 0;
}

输出

Alice

布尔型(​​bool​​)

用户有时候需要在程序进行判断,在C89标准中,用户如果想要判断某种条件是否成立,一般是定义一个整型变量,然后利用数字0和数字1来表示条件是否成立,用户就可以把变量作为一个标志位使用。  在C99标准可以使用布尔型来表示真假两种情况,头文件 stdbool.h 有相关描述,在头文件中定义了三个宏,分别是 bool、true 以及 false

#include <stdio.h>
#include <stdbool.h>int main() {bool isCodingFun = true;printf("%d\n", isCodingFun);  // 输出1表示truereturn 0;
}

输出

1

补充

​C语言标准中提供了两个关键字  &&  unsigned用于修饰整数,unsigned表示无符号,signed表示有符号,C语言中的signed修饰符是隐式声明,也就是用户定义整型变量的时候如果没有特别强调,则整型变量默认是有符号的。用户如果要存储无符号的整数,则必须定义变量必须显式声明变量是无符号的(unsigned)。

相关文章:

【C#学习笔记02】基本元素与数据类型

引言 深入了解C语言的基本元素、计算机存储器结构、常量与变量的概念以及数据类型。这些内容是C语言编程的基础&#xff0c;掌握它们对于编写高效、可靠的嵌入式程序至关重要。 1.C语言的基本元素 ​编程语言的发展离不开自然语言&#xff0c;所以编程语言的语法和词汇也是由…...

【语料数据爬虫】Python爬虫|批量采集工作报告数据(1)

前言 本文是该专栏的第4篇,后面会持续分享Python爬虫采集各种语料数据的的干货知识,值得关注。 在本文中,笔者将主要来介绍基于Python,来实现批量采集“工作报告”数据。同时,本文也是采集“工作报告”数据系列的第1篇。 采集相关数据的具体细节部分以及详细思路逻辑,笔…...

<建模软件安装教程1>Blender4.2系列

Blender4.2安装教程 0注意&#xff1a;Windows环境下安装 第一步&#xff0c;百度网盘提取安装包。百度网盘链接&#xff1a;通过网盘分享的文件&#xff1a;blender.zip 链接: https://pan.baidu.com/s/1OG0jMMtN0qWDSQ6z_rE-9w 提取码: 0309 --来自百度网盘超级会员v3的分…...

Docker极简部署开源播放器Splayer结合内网穿透远程流畅在线听歌

前言 嘿&#xff0c;各位音乐发烧友们&#xff01;如果你厌倦了广告的打扰&#xff0c;渴望在忙碌的生活中找到一片宁静的音乐天地&#xff0c;那么今天这篇教程绝对适合你——如何在Ubuntu上用Docker快速搭建一款高颜值、无广告的某抑云音乐播放器Splayer。 Splayer不仅界面…...

基于YOLO(以YOLOv8为例)模型开发算法的详细步骤,包含算法代码、训练指导、数据集准备以及可能的改进方向

以下是一个基于YOLO&#xff08;以YOLOv8为例&#xff09;模型开发算法的详细步骤&#xff0c;包含算法代码、训练指导、数据集准备以及可能的改进方向。 1. 环境准备 首先&#xff0c;你需要安装必要的库。可以使用以下命令创建一个新的虚拟环境并安装所需的库&#xff1a; …...

显示器长时间黑屏

现象 电脑启动后,进入登录界面前会随机黑屏,有时候十几秒,有时候几分钟 进入桌面后,长时间不操作电脑黑屏,移动鼠标,点击键盘后尝试点亮屏幕,也会消耗较长时间 尝试 重装系统,或者重新安装显卡,都能够恢复,但过段时间以后又出现黑屏情况 集成显卡,独立显卡都出现过 操作系统…...

linux docker相关指令

1、镜像操作 0&#xff09;、搜索&#xff1a;docker search 镜像名称 1&#xff09;、拉取&#xff1a;docker pull 2&#xff09;、推送&#xff1a;docker push 3&#xff09;、查看&#xff1a;docker images 4&#xff09;、查看所有镜像ID&#xff1a;d…...

V8引擎中的垃圾回收机制如何工作?

V8引擎中的垃圾回收机制主要通过分代回收和增量标记清除算法来管理内存。以下是其工作原理的详细说明&#xff1a; V8 的垃圾回收机制基于以下核心设计原则&#xff1a; 1. 分代假设&#xff1a;大多数对象的生命周期很短&#xff0c;只有少数对象会存活较长时间&#xff1b;…...

内网安全-横向移动PTH 哈希PTT 票据PTK 密匙Kerberos密码喷射

一.域横向pth&#xff0c;mimkatz&#xff0c;NTLM windwos server 2012 R2之前可能是NTLM和LM&#xff0c;之后为NTLM 1.mimkatz ptk 使用mimkatz进行横向移动 mimikatz sekurlsa::pth /user:administrator&#xff08;目标本地用户名&#xff09; /domain:192.168.3.32&a…...

自然语言处理文本分析:从词袋模型到认知智能的进化之旅

清晨&#xff0c;当智能音箱准确识别出"播放周杰伦最新专辑"的模糊语音指令时&#xff1b;午间&#xff0c;企业舆情系统自动标记出十万条评论中的负面情绪&#xff1b;深夜&#xff0c;科研人员用GPT-4解析百万篇论文发现新材料线索——这些场景背后&#xff0c;是自…...

洛谷 P2234:[HNOI2002] 营业额统计 ← STL set

【题目来源】 https://www.luogu.com.cn/problem/P2234 【题目描述】 Tiger 最近被公司升任为营业部经理&#xff0c;他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。 Tiger 拿出了公司的账本&#xff0c;账本上记录了公司成立以来每天的营业额。分析…...

linux---天气爬虫

代码概述 这段代码实现了一个天气查询系统&#xff0c;支持实时天气、未来天气和历史天气查询。用户可以通过终端菜单选择查询类型&#xff0c;并输入城市名称来获取相应的天气信息。程序通过 TCP 连接发送 HTTP 请求&#xff0c;并解析返回的 JSON 数据来展示天气信息。 #in…...

STM32如何精准控制步进电机?

在工业自动化、机器人控制等场合&#xff0c;步进电机以其高精度、开环控制的特性得到了广泛应用。而在嵌入式系统中&#xff0c;使用STM32进行步进电机的精确控制&#xff0c;已成为开发者的首选方案之一。 本文将从嵌入式开发者的角度&#xff0c;深入探讨如何基于STM32 MCU…...

C语言:确定进制

题目&#xff1a; 6942对于十进制来说是错误的&#xff0c;但是对于13进制来说是正确的。即, 6(13) 9(13) 42(13)&#xff0c; 而 42(13)4131213054(10)。 任务是写一段程序&#xff0c;读入三个整数p、q和 r&#xff0c;然后确定一个进制 B(2<B<40) 使得 p q r。 如果…...

[免费]微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端+Vue管理端)(高级版)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端Vue管理端)(高级版)&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端Vue管理端)(高级版…...

STM32 Bootloader理解

STM32 Bootloader个人理解 stm32单片机启动时会先运行一个引导程序Bootloader&#xff0c;该程序可以判断单片机的启动方式&#xff0c;例如stm32f103单片机会利用 boot0 、boot1 两个引脚判断启动模式。判断完启动模式后&#xff0c;设置 SP地址 以及 PC 指针指向对应的地址。…...

Linux SSHD 启动失败:OpenSSL 版本不匹配问题分析与解决

文章目录 Linux SSHD 启动失败&#xff1a;OpenSSL 版本不匹配问题分析与解决问题分析解决方案方法 1&#xff1a;重启 SSH 服务方法 2&#xff1a;检查 sshd 依赖的 OpenSSL 版本方法 3&#xff1a;检查 OpenSSL 共享库方法 4&#xff1a;重新安装 OpenSSH 总结 Linux SSHD 启…...

SpringBoot实战(三十五)微服务集成OAuth2.0(UAA)

目录 一、知识回顾1.1 什么是 OAuth2 协议&#xff1f;1.2 OAuth2 的4个角色1.3 OAuth2 的3种令牌1.4 OAuth2 的5种认证方式1.5 OAuth2 内置接口地址 二、UAA介绍2.1 概述2.2 UAA的主要功能2.3 UAA 的应用场景 三、微服务集成3.1 集成示例介绍3.2 集成测试 一、知识回顾 在进行…...

K8s 1.27.1 实战系列(七)Deployment

一、Deployment介绍 Deployment负责创建和更新应用程序的实例,使Pod拥有多副本,自愈,扩缩容等能力。创建Deployment后,Kubernetes Master 将应用程序实例调度到集群中的各个节点上。如果托管实例的节点关闭或被删除,Deployment控制器会将该实例替换为群集中另一个节点上的…...

Spring Boot笔记(上)

01 概要 Spring Boot 是 Java 领域最流行的 快速开发框架&#xff0c;专为简化 Spring 应用的初始搭建和开发而设计。 一、Spring Boot 解决了什么问题&#xff1f; 传统 Spring 痛点 • 繁琐的 XML 配置 • 需要手动管理依赖版本 • 部署依赖外部 Web 服务器&#xff08;如 …...

Mysql主从复制和Mysql高可用以及负载均衡配置

需要先配置MySQL主从复制&#xff0c;然后再在主MySQL服务器上配置MySQL Router。以下是详细说明和步骤&#xff1a; 1. 为什么需要先配置MySQL主从复制&#xff1f; MySQL主从复制是MySQL高可用性和负载均衡的基础&#xff0c;通过将数据从主服务器实时同步到从服务器&#…...

MySQL------存储引擎和用户和授权

9.存储引擎 1.两种引擎 MyISAM和InnoDB 2.两种区别 1.事务&#xff1a; MyISAM不支持事务 2.存储文件: innodb : frm、ibd MyISAM: frm、MYD、MYI 3.数据行锁定: MyISAM不支持 4.全文索引: INNODB不支持&#xff0c;所以MYISAM做select操作速度很快 5.外键约束: MyISAM…...

DeepSeek进阶应用(一):结合Mermaid绘图(流程图、时序图、类图、状态图、甘特图、饼图)

&#x1f31f;前言: 在软件开发、项目管理和系统设计等领域&#xff0c;图表是表达复杂信息的有效工具。随着AI助手如DeepSeek的普及&#xff0c;我们现在可以更轻松地创建各种专业图表。 名人说&#xff1a;博观而约取&#xff0c;厚积而薄发。——苏轼《稼说送张琥》 创作者&…...

大白话react第十八章React 与 WebGL 项目的高级拓展与优化

大白话react第十八章React 与 WebGL 项目的高级拓展与优化 1. 实现 3D 模型的导入与动画 在之前的基础上&#xff0c;我们可以导入更复杂的 3D 模型&#xff0c;并且让这些模型动起来&#xff0c;就像在游戏里看到的角色和场景一样。这里我们使用 GLTF 格式的模型&#xff0c…...

【WPF】Slider滑动方法(INotifyPropertyChanged、ValueChanged )响应速度对比分析

一、Slider基础用法 在 XAML 中添加一个 Slider 控件&#xff0c;并设置其基本属性&#xff1a; <Slider Minimum"0" <!-- 最小值 -->Maximum"100" <!-- 最大值 -->Value"50" <!-- 初始值 -->Width&quo…...

DeepSeek未来发展趋势:开创智能时代的新风口

DeepSeek未来发展趋势&#xff1a;开创智能时代的新风口 随着人工智能&#xff08;AI&#xff09;、深度学习&#xff08;DL&#xff09;和大数据的飞速发展&#xff0c;众多创新型技术已经逐渐走向成熟&#xff0c;而DeepSeek作为这一领域的新兴力量&#xff0c;正逐步吸引越…...

1-003:MySQL 的索引类型有哪些?

MySQL 中的索引类型主要分为以下几类&#xff0c;每种索引都有不同的适用场景和优化查询的作用&#xff1a; 1. 按存储结构分类 ① 聚簇索引&#xff08;Clustered Index&#xff09; 特点&#xff1a; InnoDB 引擎的 主键索引 就是 聚簇索引。数据与索引存储在一起&#xff…...

从0开始的操作系统手搓教程24——完成我们的键盘驱动子系统

目录 所以&#xff0c;我们现来说说转义字符 我们需要如何处理扫描码 当键入的是双字符键时 当键入的是字母键时 下一篇 我们下面来看看我们的键盘驱动子系统是一个怎么个事情。 驱动程序&#xff0c;你可以认为是对硬件的一层封装。我们按照手册规格的规定姿势&#xff0…...

git大文件传输报错

简述 git传输大于25M的文件时会报错&#xff0c;需要使用 Git LFS进行文件传输。 Git LFS&#xff08;Large File Storage&#xff09;是 GitHub 推荐的方式&#xff0c;可以管理大文件而不会影响 Git 性能。 操作流程 # 安装 Git LFS git lfs install# 将 PDF 文件添加到 G…...

基础玩转物联网-4G模块如何快速实现与MQTT服务器通信

目录 1 前言 2 环境搭建 2.1 硬件准备 2.2 软件准备 2.3 硬件连接 2.4 检查驱动 3 连接MQTT服务器 3.1 创建MQTT监听Topic 3.2 打开配置工具读取基本信息 3.3 设置连接参数进行数据交互 4 总结 1 前言 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻…...