初识 C 语言(2)

news2024/11/25 18:44:04

目录

  • 一、sigined 和 unsigned
    • 1. unsigned
  • 二、数据类型的取值范围
  • 三、变量的分类
    • 1. 局部变量
    • 2. 全局变量
    • 3. 全局变量和局部变量名称冲突
  • 四、算数操作符
    • 1. 加法操作符(+)
    • 2. 减法操作符(-)
    • 3. 乘法操作符(\*)
    • 4. 除法操作符(\/)
    • 5. 取余操作符
  • 五、赋值操作符(=)和复合赋值
    • 1. 赋值操作符
    • 2. 复合赋值
  • 六、单目操作符(++)、(--)、(+)、(-)
    • 1. 自增运算符(++)
    • 2. 自减运算符(--)
    • 3. 正号(+)和负号(-)
  • 七、强制类型转换

一、sigined 和 unsigned

C 语言使用关键字 signed 和 unsigned 修饰整型和字符型,signed 是有符号型,表示该类型既可以表示正数又可以表示负数,而 unsigned 是无符号型,只能表示 0 和正数。对于 int 类型,默认是有符号的,也就是 signed int,只是一般 signed 都省略不写。

1. unsigned

无符号类型所能表示的范围是有符号类型的两倍,当涉及的值没有负数是,就可以使用无符号类型的变量。该变量的声明如下:

// unsigned 类型声明
unsigned int a = 10;
unsigned long b = 20';

就是在原来声明的基础前加上 unsigned 关键字。第一条语句也可以省略 int,如下:

unsigned a = 10;

该语句和 unsigned int a = 10 是等价的。

二、数据类型的取值范围

每种数据类型都有属于它自己的取值范围,也就是存储数值的最大值和最小值的区间。我们可以通过下面文件中的常量进行查看:
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 的最⼤值。

代码演示:

在这里插入图片描述

其他整型类型和上述代码类似,只要把后面的常量名和前面的格式改掉就行。

三、变量的分类

在 C 语言中,变量按照其作用域的范围来分,分为局部变量和全局变量。简单来说,作用域就是你能够使用这个变量的范围。

1. 局部变量

(1)作用域
在 C 语言中局部变量是在函数内部或者代码块内部定义的变量,且其作用域仅限于定义他的函数内部或者代码块。如下代码:

在这里插入图片描述

这是在代码块中定义的变量 a,出了代码块,该变量就不能使用,因为它的作用域只有定义它的代码块。

(2)生命周期

局部变量存储在内存中的栈区,其生命周期为其所在的代码块或者函数。通常进入该代码块或函数时,该局部变量被创建,出该代码块或者函数时,该局部变量被销毁。

(3)初始化

局部变量若不初始化,则其值为随机值。若使用未初始化的局部变量,编译器(visual studio 2022)通常会报错。如下代码:
在这里插入图片描述

2. 全局变量

(1)作用域

全局变量通常定义在所有函数之外,全局变量的作用域为通常为整个程序,当然如果在其他文件中想使用该全局变量,需要使用关键字 extren 进行声明。如下代码:

在这里插入图片描述
上述代码分别在主函数 main() 和自定义函数 print() 中使用了全局变量 a。

在这里插入图片描述

上述代码演示了当前文件若想使用其他文件的全局变量时,需要使用关键字 extern 进行声明。

(2)生命周期

全局变量存储在内存中的静态区,其生命周期为整个程序。全局变量程序启动时被创建,在程序结束时被销毁。

(3)初始化

全局变量若不初始化,则编译器将其设置为 0。如下代码:

在这里插入图片描述

3. 全局变量和局部变量名称冲突

若全局变量和局部变量名称冲突,那么局部变量会隐藏全局变量。如下代码:

在这里插入图片描述

当全局变量和局部变量同名时,在两个变量的作用域重叠部分会优先使用局部变量。所以,我们应该尽量让不要编写全局变量和局部变量名称冲突的代码。

四、算数操作符

在 C 语言中,常见的算数操作符有:加法操作符(+),减法操作符(-),乘法操作符(*),除法操作符(/)和取余操作符(%)。

1. 加法操作符(+)

加法操作符就是把左边的操作数和右边的操作数相加,然后把该结果存放在一个临时变量中,不改变原操作数。如下代码:

在这里插入图片描述
如果是一个整数和浮点数进行加法运算,那么该整数会转换为该浮点数的类型,然后再进行运算。

2. 减法操作符(-)

减法操作符就是左边的操作数减去右边的操作数,然后把结果存储在一个临时变量中,不改变原操作数。如下代码:

在这里插入图片描述
如果是一个整数和浮点数进行减法运算,那么该整数会转换为该浮点数的类型,然后再进行运算。

3. 乘法操作符(*)

乘法操作符就是左边的操作数乘以右边的操作数,然后把结果存储在一个临时变量中,不改变原操作数。如下代码:

在这里插入图片描述

如果是一个整数和浮点数进行乘法运算,那么该整数会转换为该浮点数的类型,然后再进行运算。

4. 除法操作符(/)

倘若除法操作符中有一个运算对象是浮点数,那么进行浮点数的除法。否则进行整数除法。

(1)浮点数除法

在这里插入图片描述

(2)整数除法

在这里插入图片描述

这里的结果是 0,因为整数除法只取整数,舍弃余数。4 除以 5 得 0 余 4,所以结果为 0。

5. 取余操作符

首先,取余操作符的两个运算对象都必须是整数。其运算结果为左边操作数对右边操作数进行整数除法的余数。如:4 除以 5 得 0 余 4,所以 4 % 5 = 4。如下代码:

在这里插入图片描述

五、赋值操作符(=)和复合赋值

1. 赋值操作符

赋值操作符的作用是把右边操作数的值赋值给左边的操作数,且可以连续赋值,其运算顺序是从右往左,其结果为左边运算对象赋值后的值。如下代码:

在这里插入图片描述

上述代码在赋值过程中先计算 c = 5,然后该表达式的值为赋值后的 c,即 5 然后继续 b = c,然后 a = b。

2. 复合赋值

复合赋值其实就是赋值操作符和其他操作符的结合,如:+=、-=、/= 等。简单来说,a += b 其实就相当于 a = a + b。其他复合赋值操作符均是如此。如下代码:

在这里插入图片描述

六、单目操作符(++)、(–)、(+)、(-)

1. 自增运算符(++)

自增运算符有两种形式,一种是前置自增,如:++a。一种是后置自增,如:a–。前置形式先把变量 a 的值加 1,再使用变量 a 的值;而后置形式是先使用 a 的值然后再把 a的值加 1。如下代码:

在这里插入图片描述
可以看到,无论是前置形式还是后置形式,自增运算符最终的效果都是让该变量的值加 1,只是前置形式使用自增后的值,而后置形式使用自增前的值。

2. 自减运算符(–)

和自增运算符一样,只是自减运算符的最终效果是减 1 而已。如下代码:
在这里插入图片描述

3. 正号(+)和负号(-)

运算符正号(+)对正负值没有影响,是一个完全可以省略的运算符,但是写了也不会报错。如下代码:
在这里插入图片描述
可以看到,上述代码中的正号(+)对 a 的值的正负并没有任何影响。

运算符负号(-)对该值的正负取反,若 a 为正,则 -a 为负,若 a 为负,则 -a 为正。如下代码:
在这里插入图片描述

七、强制类型转换

强制类型转换的格式为:(目标类型)代转换对象。把代转换对象的值强制转换为目标类型。如下代码:
在这里插入图片描述
上述代码第一次进行 a / b 进行的是整数除法,但是第二次进行 a / b 之前,a 的值 10 被强制类型转换为 double 类型的 10.0 ,然后进行了浮点数除法。

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

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

相关文章

认知杂谈96《反人性与顺人性》

内容摘要: 成长常被视为反人性的,因为它意味着要离开舒适区,面对挑战。然而,在与人共事时,顺应人性同样重要,它要求我们理解他人的需求和动机。为了平衡成长与顺应人性,我们应设定清晰目标&…

封装el-upload组件,用于上传图片和视频

使用环境 vue3element-ui plus 需要根据后端返回结构修改的函数&#xff1a;onPreview onRemove onSuccess 组件使用 基本使用 源代码&#xff1a; <script setup> import AutoUploadFile from /components/auto-upload-file/index.vue function change(urls){console.…

hdfs伪分布式集群搭建

1 准备 vmware 虚拟三台centos系统的节点三台机器安装好jdk环境关闭防火墙&#xff08;端口太多&#xff0c;需要的自行去开关端口&#xff09;hadoop压缩包解压至三台服务器 可在一台节点上配置完成后克隆为三台节点 2 host修改 vi /etc/hosts在每个节点上添加三台机器的i…

Linux环境搭建git服务器和代码自动化部署

在开发过程中&#xff0c;我们经常遇到的问题就是提交代码到测试地址&#xff0c;然后进行线上测试。 要实现Git代码的自动化部署&#xff0c;考虑以下几种方法 FTP提交&#xff1a;可以使用FTP将代码上传到服务器自动化部署工具&#xff1a;如Jenkins、当代码被推送到仓库时…

【JavaWeb实战项目】在线蛋糕商城的设计与实现(附完整源代码)

一、系统介绍 本项目分为前后台&#xff0c;分为管理员与普通用户两种角色&#xff0c;管理员登录后台&#xff0c;普通用户登录前台&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登录 商品管理 订单管理 客户管理 类目管理等功能。 用户角色包含以下功能&a…

MySQL 表的操作

温馨提示&#xff1a;非特殊情况不要修改和删除表 创建表 第一种方式 第二种方式 第三种方式 简单查看 查看表 查询当前数据库&#xff1a;select database(); 查询当前数据库中具有的表&#xff1a;show tables; 查看表的简略信息&#xff1a;desc 表名1&#xff1b; 查看表的…

22.第二阶段x86游戏实战2-背包遍历REP指令详解

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…

双十一狂欢派对 五款市面上获得好评的好物

一年一度的双十一购物狂欢派对即将到来&#xff0c;这一天不仅是广大消费者的福利日&#xff0c;也是各大品牌展示实力的战场。随着市场的不断发展与消费者需求的多样化&#xff0c;双十一已经不仅仅是降价促销的代名词&#xff0c;更是品质与创新的竞技场。在琳琅满目的商品中…

【C++】--类与对象(1)

&#x1f9c7;个人主页: 起名字真南 &#x1f32d;个人专栏:【数据结构初阶】 【C语言】 【C】 目录 1 类的定义1.1 类定义格式1.1.1 Stack类1.1.2 Date类1.1.3 Struct格式 1.2 访问限定符1.3 类域 2 实例化2.2 对象大小 3 this指针 1 类的定义 1.1 类定义格式 1 class为定义…

软件设计之SSM(5)

软件设计之SSM(5) 路线图推荐&#xff1a; 【Java学习路线-极速版】【Java架构师技术图谱】 尚硅谷新版SSM框架全套视频教程&#xff0c;Spring6SpringBoot3最新SSM企业级开发 资料可以去尚硅谷官网免费领取 学习内容&#xff1a; AOP面向切面编程 代理AOP面向切面编程获取…

好用的股票预测八大算法的Python实现

股票预测算法通常涉及时间序列分析、统计学、机器学习和深度学习等多种方法。以下是经典的、常见的十大股票预测算法及其Python实现。这些算法各有优势&#xff0c;可以用于不同的市场预测场景。以下代码实现中&#xff0c;我们将使用yfinance下载数据&#xff0c;并展示各算法…

如何创建商业博客:一步一步教你从零开始

搭建一个成功的商业博客&#xff0c;不仅可以提升品牌形象&#xff0c;还能吸引更多潜在客户。作为一个在这方面有些经验的人&#xff0c;我来分享一些实用的步骤和建议&#xff0c;希望对你有所帮助。 一、明确你的目标和客户群体 确定目标&#xff1a;首先&#xff0c;你得搞…

Origin图像中插入各种符号以及矩形椭圆等

画各种形状 空白处右击 文字处右击

【RISCV指令集手册】向量扩展v1.0

概述 从rvv 0.9说起 此前写过向量扩展0.9的阅读记录&#xff0c;三年已过&#xff0c;本以为不再参与RVV的相关开发&#xff0c;奈何造化弄人&#xff0c;旧业重操&#xff0c;真就世事难料呀。 总的来说1.0版本相比0.9版本的扩充了较多内容&#xff0c;但大部分为指令功能的…

力扣1~5题

题1&#xff08;简单&#xff09;. 思路&#xff1a; 因为时间复杂度小于n^2,所以不能双for遍历&#xff0c;怎么优化&#xff1f; 这里采用一个键值对的形式&#xff0c;存储nums离target的间隔和它的下标&#xff0c;只要n&#xff0c;然后再遍历nums有没有刚好是这个距离的就…

cnn突破四(生成卷积核与固定核对比)

cnn突破三中生成四个卷积核&#xff0c;训练6万次&#xff0c;91分&#xff0c;再训练6万次&#xff0c;95分&#xff0c;不是很满意&#xff0c;但又找不到问题点&#xff0c;所以就想了个办法&#xff0c;使用三个固定核&#xff0c;加上三层bpnet神经网络&#xff0c;看看效…

从零开始学cv-16:超像素图像分割

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、超像素图像分割简介二&#xff1a;SLIC超像素图像分割三&#xff1a;Seed超像素分割算法四 &#xff1a;LSC超像素分割 前言 在数字图像处理和计算机视觉领…

2、Redis数据安全性分析

文章目录 一、Redis性能压测脚本介绍二、Redis数据持久化机制详解1、整体介绍Redis的数据持久化机制2、RDB详解3、AOF详解4、混合持久化策略 三、Redis主从复制Replica机制详解**1、Replica是什么&#xff1f;有什么用&#xff1f;****2、如何配置Replica&#xff1f;****3、如…

【AI知识点】正态分布(高斯分布)和中心极限定理(CLT)

正态分布&#xff08;Normal Distribution&#xff09;和中心极限定理&#xff08;Central Limit Theorem, CLT&#xff09; 是统计学中非常重要的概念&#xff0c;它们广泛应用于概率论、数据分析、机器学习等领域。以下将详细解释这两个概念及其关系。 1. 正态分布&#xff…

【C++】入门基础介绍(上)C++的发展历史与命名空间

文章目录 1. 前言2. C发展历史2. 1 C版本更新特性一览2. 2 关于C23的一个小故事: 3. C的重要性3. 1 编程语言排行榜3. 2 C在工作领域中的应用 4. C学习建议和书籍推荐4. 1 C学习难度4. 2 学习书籍推荐 5. C的第一个程序6. 命名空间6. 1 namespace的价值6. 2 namespace的定义6. …