零基础学C语言——变量、常量与数据类型

欢迎大家访问http://melonc.io来学习C语言,可以在浏览器中直接编辑和运行C语言,同时也有ChatGPT辅助解释和诊断,提供还提供了其他文章和C语言项目。

本文在melonc.io中的中文文章中亦可找到(传送门),且会直接在文章中给出在线尝试功能,推荐读者在melonc.io中进行学习。

本文重写自笔者以前所写的同名文章,重写原因是因为,曾经的文章中有些类比描述过于复杂,所述的文章中提及的细节并不利于让零基础的初学者快速上手,因此对这部分做了重写和删减,希望改进后的文章可以更好的帮助即将学习C语言的你。

变量

我们先描述一下变量这个概念。其实这个概念与数学中变量的概念是一致的,即一个符号所指代的值是可改变的。所以变量或许被叫做可变量更准确。这就好比一个纸箱,箱子里最开始装了10个苹果,然后我将它们逐个取出,每取一个,其内部苹果的数量就减一,那么这个纸箱就是一个变量。我们可以用如下形式进行书写:

box = 10;box = box - 1;

在计算机的世界中,纸箱就等价于内存,我们所有变量的数据都是存放在内存上的(这里并不准确,事实上有部分数据存放在寄存器上,但本文暂不过多涉及)。

常量

有了变量,那么就要说说常量。常量的含义与变量刚好相反,即一个符号所指代的值一旦指定后就不可变了。对于上面的那个类比就是,一个纸箱内部必须有10个苹果,且不可以多一个也不可以少一个,必须正好是10。这样,当后续再次提及这个箱子时,所有人都知道它等价于10个苹果,不会有出入。

数据类型

有了变量和常量的概念,那么下一个问题就是,这个可存储数据的空间大小是多大呢?或者说这个箱子的规格是什么样的呢?这就涉及到了数据类型。

在C语言中,这些类型有:

  • 整型,即整数
  • 浮点型,即实数
  • 字符型,即单个的可打印字符(什么叫可打印的我们后面会说到)
  • 空类型,即无类型
  • 指针类型

下面我们将逐个类型说明,初学者暂时不需要死记硬背每一个类型的数值范围,在有需求时查阅范围即可。

整型分为:

  • 有符号短整型,对应关键字为short,占用2字节内存,即该类型的数据值范围为-32,768 到 32,767
  • 无符号短整型,对应关键字为unsigned short,占用2字节内存,数据值范围0 到 65,535
  • 有符号整型,关键字int,占用4字节(注意,在windows上这个类型占2字节),数据值范围-2,147,483,648 到 2,147,483,647
  • 无符号整型,关键字unsigned int,占用4字节,数据值范围0 到 4,294,967,295
  • 有符号长整型,关键字long32位系统上占4字节,数据值范围-2,147,483,648 到 2,147,483,647,64位系统上占8字节,数据值范围-9223372036854775808到9223372036854775807
  • 无符号长整型,关键字unsigned long32位系统上占4字节,数据值范围0 到 4,294,967,295,64位系统上占8字节,数据值范围0到18446744073709551615
  • 还有long longunsigned long long,占8字节内存,数据值范围分别为-9223372036854775808到9223372036854775807和0到18446744073709551615

浮点型分为:

  • 单精度浮点型,关键字为float,占4字节,数值范围1.2E-38 到 3.4E+38,精度是精确到6位小数
  • 双精度浮点型,关键词为double,占8字节,数值范围2.3E-308 到 1.7E+308,精度是精确到15位小数
  • 还有一种,我词穷了,不知道中文该怎么叫了,关键词为long double,占16字节,数值范围3.4E-4932 到 1.1E+4932,精度是精确到19位小数

可以看到,实数都是有一个精度范围的,如果超出这个精度范围就会造成精度损失,因此在运行一些除法运算后再执行乘法力图恢复初始值时有时是不可能的。

字符型分为:

  • 有符号字符,关键词char,占1字节,数值范围-128 到 127
  • 无符号字符,关键词unsigned char,占1字节,数值范围0 到 255

其中char型字符为可输出字符,参考ASCII码表来找到其对应的输出到终端上的字符:
在这里插入图片描述

其中,值为0~31和127的字符是控制类字符,剩余为可显示字符

空类型:又称为void型,关键字为void,表示无类型或者不知其类型。

指针类型:本节暂时不讨论,留待后续专门讨论指针的文章中详述。

看一些例子

到此,我们来看一下各种类型的例子,巩固一下前面的内容。

整型示例:

short var_1 = -1; //有符号短整型unsigned short var_2 = 65535; //无符号短整型int var_3 = 1000000; //有符号整型unsigned int var_4 = 999999999; //无符号整型long var_5 = 9876278913; //有符号长整型unsigned long var_6 = 12871236897; //无符号长整型long long var_7 = -1238123871; //码哥词穷,这类型你就当是长长整型吧...unsigned long long var_8 = 1987623453;const int a = 10; //整型常量a的值为10const short b = 127; //短整型常量b的值为127

浮点型示例:

float var_1 = 3.141592; //单精度浮点数double var_2 = 1.124987651; //双精度浮点数long double var_3 = 3231.3123817682;const float pi = 3.141592; //单精度浮点型常量pi的值为3.141592

字符型示例:

char var_1 = 70; //有符号字符型char var_2 = 'F'; //有符号字符型,var_2和var_1其实是相等的,在ASCII码表中,F的十进制值即为70
//如果要给char型变量赋值ASCII码表中可显示字符,需要用单引号扩住,且单引号内只能有一个字符
//但有一种特例,叫做转译字符例如下面:
char var_3 = '\n'; //这里的 \ 就是转义字符,当编译器遇到转自字符时会吞掉转义字符,
//并查看其后字符是什么字符,然后转成相应特定字符,本例中\n为换行符,即ASCII中值为10的换行符。unsigned char var_4 = 255; //无符号字符型const char enter = '\n'; //字符型常量enter的值为 \n

变量以及常量的命名要求

上面的示例中对变量和常量的名字命名都是形如:

var_xxx

其实在C语言中,变量与常量的名字命名是有规范的,要求如下:

名字必须以字母或者下划线开头,后面的字符既可以是字母也可以是下划线也可以是数字。

所以,形如如下名字是不合法的:

123_abc
-a
+a
123bcd

类型转换

先来看一个例子体会一下:

int a = 5.0 / 2;

/表示➗,即除法。这时a的值是多少呢?

答案是2,而不是2.5。这里就是类型转换起了作用。5.0是浮点数,浮点数除整数,得到的结果还是浮点数,但是这个值赋给了整型变量a,因此除法的结果需要满足a的类型约束,只保留整数部分,因此就是2。这里也不存在四舍五入一说,即便是2.99999也会是2,而不是3。

上面的这种转换叫做自动类型转换,与之相对的转换模式叫强制类型转换

我们先看下强制类型转换的例子,也就能理解上面这个例子叫自动类型转换了。

int b = (int)2.5;

在这个例子中,如果不在2.5前加(int),那么编译器会给出警告,说你这么写等于是“偷摸地”将双精度浮点数转换为整型了。为了避免这个警告(当然,取整数也是符合这个例子中我的预期的,即我要的也是整数),在2.5前加入:

(基础数据类型) //本例为(int)

将2.5先转成整型2,然后赋给变量b。

下面看一些其他类型转换的例子:

unsigned char var_1 = (unsigned char)'F'; //因为'F'默认为char型short var_2 = (short)999999; //999999为int型,直接赋值会爆出警告,强制类型转换后不会有警告,但是var_2的值为16959

这里var_2的值为16959的原因是:

整型999999占4字节,其十六进制为0x000F423F。short类型占2字节,因此会将int型的低16位(即后两字节)内容赋给变量var_2,也就是0x423F,这个十六进制数转换为十进制后的值就是16959。

对于十六进制不了解的读者,可以去网上先充一下电,因为十六进制在编程中用到的频度不比整数低。

感谢阅读!

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

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

相关文章

Python 预测 NBA 比赛结果

Python 预测 NBA 比赛结果 一、 内容介绍 不知道你是否在朋友圈被刷屏过 NBA 的某场比赛进度或者结果?或者你就是一个 NBA 狂热粉,比赛中的每个进球、抢断或是逆转压哨球都能让你热血沸腾。除去观赏精彩的比赛过程,我们也同样好奇比赛的结果…

【NLP】让GPT-3、ChatGPT、GPT-4一起做脑筋急转弯,GPT-4一骑绝尘!

夕小瑶科技说 原创作者 | python一个烙饼煎一面一分钟,两个烙饼煎两面几分钟? 让你来回答,是不是一不小心就掉到沟里了?如果让大语言模型来做这种脑筋急转弯会怎样呢?研究发现,模型越大,回答就越…

江瀚新材登陆上交所主板:募资约24亿元,甘书官父子为实际控制人

1月31日,湖北江瀚新材料股份有限公司(下称“江瀚新材”,SH:603281)在上海证券交易所主板上市。本次上市,江瀚新材公开发行股票66,666,667股,发行价格为35.59元/股,发行市盈率为14.80倍。 按发行…

聚威新材在科创板被暂缓审议:毛利率高于同行,张天荣为董事长

2023年1月10日,上海证券交易所披露的信息显示,上海聚威新材料股份有限公司(下称“聚威新材”)被科创板上市委员会暂缓审议。据贝多财经了解,聚威新材仍有多个问题需进一步落实事项。 上市委要求聚威新材落实&#xff1…

坤泰股份在深交所上市:预计全年营收超4亿元,张明夫妇为实控人

2月16日,山东坤泰新材料科技股份有限公司(下称“坤泰股份”,SZ:001260)在深交所主板上市。本次上市,坤泰股份的发行数量为2875万股,发行价为14.27元/股,募资4.10亿元。 据贝多财经了解&#xf…

聚观早报 | 马斯克称星舰1-2个月内准备再发射;推特撤下官媒标签

今日要闻:马斯克称星舰1-2个月内准备再发射;推特撤下「官媒」标签;Pixel Fold 折叠机型首次被泄露;蔚来员工曝半年加班500小时;苹果Mac Pro和Mac Studio无缘WWDC 马斯克称星舰1-2个月内准备再发射 美国当地时间 4 月 …

科大讯飞刘聪:如何持续保持语音识别技术的领先

2020科大讯飞全球1024开发者节今天正式拉开帷幕,伴随着AI的发展,我们得以更全面和细致地洞察人们的生活习惯,并为人们提供更加智能和便捷的服务。在人工智能的应用场景中,最重要的一个就是语音交互。针对这一点,科大讯…

科大讯飞2位董事同日辞职,联合创始人胡郁发力造芯

明敏 发自 凹非寺量子位 报道 | 公众号 QbitAI 科大讯飞高层发生重大人事变动。 昨晚讯飞官方披露:董事、副总裁胡郁和陈涛二人分别递交《辞职报告》,申请辞去相关职务。 同时宣布拟补选副总裁、董事会秘书江涛和副总裁兼CFO段大为任非独立董事候选人。 …

文心一言 VS 讯飞星火 VS chatgpt (60)-- 算法导论6.4 4题

文心一言 VS 讯飞星火 VS chatgpt (60)-- 算法导论6.4 4题 四、证明:在最坏情况下,HEAPSORT 的时间复杂度是Ω (nlgn)。 文心一言: 要证明在最坏情况下,HEAPSORT 的时间复杂度是 Ω(n log n)&#xff0c…

Openpcdet训练自己的数据集

一. Openpcdet的安装以及使用 * Openpcdet详细内容请看以下链接: GitHub - open-mmlab/OpenPCDet: OpenPCDet Toolbox for LiDAR-based 3D Object Detection. 1.首先gitclone原文代码 2. 这里我建议自己按照作者github上的docs/install文件夹下指示一步步安装&a…

无代码资讯|微软将GPT-4集成在Power Apps等产品中;谷歌推出无代码开发平台Gen App Builder;第一新声发布《2022年中国高成长企业级SaaS行业研究报告》

栏目导读:无代码资讯栏目从全球视角出发,带您了解无代码相关最新资讯。 Top3大事件 1、微软将GPT-4集成在Power Apps等产品中,通过自然语言对话就能开发应用 北美时间3月16日,微软召开了“The Future of Work With AI”大会。微…

ShardingSphere 社区出品|LGTM :数据圈内的周度「热点精选」

📢「LGTM」的意思是指:在我看来不错 (Looks Good to Me),这是代码审阅者在批准 CL 时说的常用语。本周,ShardingSphere 社区正式开辟一个全新的内容专栏——「LGTM 专栏」。致力为您带来业界最佳新闻,让您在 5 分钟内了…

2023年网络安全趋势【网安人必看】

数据安全越来越重要。 我国《数据安全法》提出“建立健全数据安全治理体系”,各地区部门均在探索和简历数据分类分级、重要数据识别与重点保护制度。 数据安全治理不仅是一系列技术应用或产品,更是包括组织构建、规范制定、技术支撑等要素共同完成数据…

2023年网络安全发展前景

数据安全越来越重要。 我国《数据安全法》提出“建立健全数据安全治理体系”,各地区部门均在探索和简历数据分类分级、重要数据识别与重点保护制度。 数据安全治理不仅是一系列技术应用或产品,更是包括组织构建、规范制定、技术支撑等要素共同完成数据…

通用智能面临巨大掣肘,国产AIGC还在寻找光明

无论技术有多先进,符合商业规律才能笑到最后。 数科星球 原创 作者丨苑晶 编辑丨十里香 AIGC背后充满了故事,在一家家企业手握巨额融资之时,人们耳边再次响起了警钟。诚然,在新的浪潮之下,符合商业规律的企业才能笑…

擎创动态 | 来自华为的深度认可,擎创再获华为鲲鹏技术认证

在数字中国的信息技术应用国产化进程中,擎创科技除持续投入自主产品研发外,还深度适配了涵盖芯片、服务器、操作系统、数据库、中间件、云服务、应用等领域的国产化产品,与华为的合作适配便是其中重要的一环。近期,擎创夏洛克智能…

Python请求错误“ check_hostname requires server_hostname”?

进行request请求时,有时必须开VPN才能访问,而开着会遇到如下问题: 原因是urllib3升级后增加了 HTTPS的支持,就尝试用https连接代理服务器,但是代理服务器其实只支持 http,因此出现了错误。 简单解决办法&…

flask部署钉钉机器人和企业微信机器人

引言 创建机器人,目的是通过机器人的方式,提出用户的问题,得到想要的回答 钉钉机器人 首先我们需要获取钉钉的企业内部开发者权限然后我们进入钉钉开放平台,登陆后,选择应用开发->机器人->创建应用,我创建了一…

视觉大模型调研(Survey of Visual Foundation Model)

目录 A.写在前面 B.论文支撑与基础理论 1.大模型基本概念的诞生 2.大模型产业化落地的理论支撑 3.视觉模型架构的形成-Transformer到ViT再到MAE C.产业落地化现状 1.百度文心 UFO 2.0 整体概述 原理介绍 模型效果 应用场景与方案 2.华为 盘古CV视觉大模型 模型预训…

30亿参数,华为云发布全球最大预训练模型,开启工业化AI开发新模式

本文分享自华为云社区《HDC.Cloud 2021 | 华为云发布全球最大预训练模型,开启工业化AI开发新模式》,原文作者:技术火炬手 。 4月25日,华为云发布盘古系列超大规模预训练模型,包括30亿参数的全球最大视觉(C…