【CSDN新星计划】初阶牛C/C++赛道——顺序程序设计(数据的表现形式及其运算)

news2024/12/25 13:42:39

在这里插入图片描述

目录

 🍊1.数据的表现形式及其运算

🍉1.1常量和变量

🍀1.1.1常量

🍀1.1.2变量

🍀1.1.3常变量

🍀1.1.4标识符

🍉1.2数据类型

🍉1.3整型数据

🍀1.3.1整型数据的分类

🍀1.3.2整型变量的符号属性

🍉 1.4字符型数据

🍀1.4.1字符与字符代码

🍀 1.4.2字符变量

🍉1.5浮点型数据


 1.数据的表现形式及其运算

1.1常量和变量

 在计算机高级语言中,数据有两种表现形式:常量和变量。

1.1.1常量

在程序运行过程中,其值不能被改变的量称为常量

常用的常量有以下几类:

(1)整型常量。如1000,12345,0,-345等都是整型常量。

(2)实型常量。有两种表示形式:
①十进制小数形式,由数字和小数点组成。如123.456,0.345,一56.79,0.0,12.0等。
②指数形式,如12.34e3,-346.87e-25,0.145E-25等。由于在计算机输入或输出时无法表示上角或下角,故规定以字母e或E代表以I0为底的指数。但应注意:e或E之前必须有数字,且e或E后面必须为整数。如不能写成e4,12e2.5。
(3)字符常量。有两种形式的字符常量:

①普通字符,用单撇号括起来的一个字符,如:'a','Z','3','?','#'。不能写成'ab'或'12'。请注意:单撇号只是界限符,字符常量只能是一个字符,不包括单撇号。a和'A是不同的字符常量。字符常量存储在计算机存储单元中时,并不是存储字符(如a,z,#等)本身,而是以其代码(一般采用ASCII代码)存储的,例如字符'a'的ASCII代码是97,因此,在存储单元中存放的是97(以二进制形式存放)。ASCII字符与代码对照表如图所示:

②转义字符,除了以上形式的字符常量外,C语言还允许用一种特殊形式的字符常量,就是以字符“\”开头的字符序列。例如,在printf函数中的'\n'代表一个“换行”符。'\t'代表将输出的位置跳到下一个Tab位置(制表位置),一个Tab位置为8列。这是一种在屏幕上无法显示的“控制字符”,在程序中也无法用一个一般形式的字符来表示,只能采用这样的特殊形式来表示。

常用的以“\”开头的特殊字符如图所示:

上表中列出的字符称为转义字符,意思是将“\”后面的字符转换成另外的意义。如“\n”中的“n”不代表字母n而作为“换行”符。

上表中倒数第2行是一个以八进制数表示的字符,例如'\101'代表八进制数101的ASCII字符即'A'(八进制数101相当于十进制数65,从ASCII表中可以看到ASCII码(十进制数)为65的字符是大写字母'A')。'\012'代表八进制数12(即十进制数的10)的ASCII码所对应的字符“换行”符。上表中倒数第1行是一个以十六进制数表示的ASCII字符,如'\x41'代表十六进制数41的ASCII字符,也是A(十六进制数41相当于十进制数65)。用表中的方法可以表示任何可显示的字母字符、数字字符、专用字符、图形字符和控制字符。如'\033'或'\x1B’代表ASCII代码为27的字符,即ESC控制符。\0或\000是代表ASCII码为0的控制字符,即“空操作”字符,它常用在字符串中。

(4)字符串常量。如“boy”,"123"等,用双撇号把若干个字符括起来,字符串常量是双撇号中的全部字符(但不包括双撇号本身)。注意不能错写成'CHINA',boy','123'。单撇号内只能包含一个字符,双撇号内可以包含一个字符串。

(5)符号常量。用#define指令,指定用一个符号名称代表一个常量。如:

#define PI 3.1416         //注意行末没有分号

经过以上的指定后,本文件中从此行开始所有的PI都代表3.1416。在对程序进行编译前,预处理器先对PI进行处理,把所有PI全部置换为3.1416。这种用一个符号名代表一个常量的,称为符号常量。在预编译后,符号常量已全部变成字面常量(3.1416)。使用符号常量有以下好处。

含义清楚。看程序时从PI就可大致知道它代表圆周率。在定义符号常量名时应考虑“见名知义”。在一个规范的程序中不提倡使用很多的常数,如:sum=15*30*23.5*43,在检查程序时搞不清各个常数究竟代表什么。应尽量使用“见名知义”的变量名和符号常量

在需要改变程序中多处用到的同一个常量时,能做到“一改全改”。例如在程序中多处用到某物品的价格,如果价格用一个常数30表示,则在价格调整为40时,就需要在程序中作多处修改,若用符号常量PRICE代表价格,只须改动一处即可:

#define PRICE 40

注意:要区分符号常量和变量,不要把符号常量误认为变量。符号常量不占内存,只是一个临时符号,代表一个值,在预编译后这个符号就不存在了,故不能对符号常量赋新值。为与变量名相区别,习惯上符号常量用大写表示,如PI,PRICE等。

1.1.2变量

变量代表一个有名字的、具有特定属性的一个存储单元。它用来存放数据,也就是存放变量的值。在程序运行期间,变量的值是可以改变的

变量必须先定义,后使用。在定义时指定该变量的名字和类型。一个变量应该有一个名字,以便被引用。请注意区分变量名和变量值
这两个不同的概念,如图所示,a是变量名,3是变量a的值,即存放在变量a的内存单元中的数据。变量名实际上是以一个名字代表的一
个存储地址。在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址。从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据。

1.1.3常变量

C99允许使用常变量,方法是在定义变量时,前面加一个关键字 const,如:

const int a=3;

定义a为一个整型变量,指定其值为3,而且在变量存在期间其值不能改变。

常变量与常量的异同是:常变量具有变量的基本属性:有类型,占存储单元,只是不允许改变其值。可以说,常变量是有名字的不变量,而常量是没有名字的不变量。有名字就便于在程序中被引用

请思考:常变量与符号常量有什么不同?如:

    #define Pi31415926                            //定义符号常量

const float pi-31415926;                     //定义常变量

符号常量Pi和常变量pi都代表3.1415926,在程序中都能使用。但二者性质不同:定义符号常量用#define指令,它是预编译指令,它只是用符号常量代表一个字符串,在预编译时仅进行字符替换,在预编译后,符号常量就不存在了(全置换成31415926了).对符号常量的名字是不分配存储单元的。而常变量要占用存储单元,有变量值,只是该值不改变而已。从使用的角度看,常变量具有符号常量的优点,而目使用更方便。有了常变量以后,可以不必多用符号常量。

说明:有些编译系统还未实现C99的功能,因此不能使用常变量

1.1.4标识符

在计算机高级语言中,用来对变量、符号常量名、函数、数组、类型等命名的有效字符序列统称为标识符(identifier)。简单地说,标识符就是一个对象的名字。前面用到的变量名p1,p2cf,符号常量名PIPRICE,函数名printf等都是标识符。

C语言规定标识符只能由字母、数字和下画线3种字符组成,且第1个字符必须为字母或下画线。下面列出的是合法的标识符,可以作为变量名:

sum,average, _total,Class,day,month,Student_name,lotus_1_2_3,BASIC,li_ling。

下面是不合法的标识符和变量名:

M.D.John,¥123,#33,3D64,a>b

注意:编译系统认为大写字母和小写字母是两个不同的字符。因此.sum和SUM是两个不同的变量名,同样,Class和class也是两个不同的变量名。一般而言,变量名用小写字母表示,与人们日常习惯一致,以提高可读性。

1.2数据类型

所谓类型,就是对数据分配存储单元的安排,包括存储单元的长度(占多少字节)以及数据的存储形式。不同的类型分配不同的长度和存储形式。

 其中,基本类型(包括整型和浮点型)和枚举类型变量的值都是数值,统称为算术类型(arithmetic type)。算术类型和指针类型统称为纯量类型(scalartype),因为其变量的值是以数字来表示的。枚举类型是程序中用户定义的整数类型。数组类型和结构体类型统称为组合类型(aggregatetype),共用体类型不属于组合类型,因为在同一时间内只有一个成员具有值。两数类型用来定义函数,描述一个函数的接口,包括函数返回值的数据类型和参数的类型。

不同类型的数据在内存中占用的存储单元长度是不同的,例如,Visual C++为char型(字符型)数据分配1个字节,为int型(基本整型)数据分配4个字节,存储不同类型数据的方法也是不同的。

1.3整型数据

1.3.1整型数据的分类

(1)基本整型( int 型)

编译系统分配给 int 型数据2个字节或4个字节(由具体的C编译系统自行决定)。如 Turbo C 2.0 为每一个整型数据分配2个字节(16个二进位),而Visual C++ 为每一个整型数据分配4个字节(32位)。在存储单元中的存储方式是:用整数的补码(complement)形式存放。一个正数的补码是此数的二进制形式,如5的二进制形式是101,如果用两个字节存放一个整数,则在存储单元中数据形式如图所示:

如果是一个负数,则应先求出负数的补码。求负数的补码的方法是:先将此数的绝对值写成二进制形式,然后对其所有二进位按位取反,再加1。如—5的补码见图:

在存放整数的存储单元中,最左面一位是用来表示符号的。如果该位为0,表示数值为正;如果该位为1,表示数值为负。

 (2)短整型( short int )

类型名为 short int 或 short 。如用 Visual C++,编译系统分配给 int 数据4个字节,短整型2个字节。存储方式与 int 型相同。一个短整型变量的值的范围是-32768~32767。

(3)长整型( long int )

类型名为 long int 或 long 。Visual C++对一个 long 型数据分配4个字节(即32位),因此 long int 型变量的值的范围是一231~(231-1),即-2147483648~2147483647。

(4)双长整型( long long int )

类型名为 long long int 或 long long,一般分配8个字节。这是 C99 新增的类型,但许多C编译系统尚未实现。

1.3.2整型变量的符号属性

以上介绍的几种类型,变量值在存储单元中都是以补码形式存储的,存储单元中的第1个二进位制代表符号。整型变量的值的范围包括负数到正数,如图所示:

在实际应用中,有的数据的范围常常只有正值(如学号、年龄、库存量、存款额等)。为了充分利用变量的值的范围,可以将变量定义为“无符号”类型。可以在类型符号前面加上修饰符unsigned,表示指定该变量是“无符号整数”类型。如果加上修饰符signed,则是“有符号类型”。因此,在以上4种整型数据的基础上可以扩展为以下8种整型数据:

有符号基本整型     [signed] int

无符号基本整型     unsigned int

有符号短整型        [signed] short[int]

无符号短整型        unsigned short [int]

有符号长整型        [signed] long[int]

无符号长整型        unsigned long [int]

有符号双长整型*   [signed]longlong[int]

无符号双长整型*    unsignedlonglong[int]

以上有“*”的是C99增加的,方括号表示其中的内容是可选的,既可以有,也可以没有。如果既未指定为 signed 也未指定为 unsigned 的,默认为“有符号类型”。如 signed int a 和 int a 等价。

有符号整型数据存储单元中最高位代表数值的符号(0为正,1为负)。如果指定 unsigned (为无符号)型,存储单元中全部二进位(b)都用作存放数值本身,而没有符号。无符号型变量只能存放不带符号的整数,如 1234687 等,而不能存放负数,如 一123,-3。由于左面最高位不再用来表示符号,而用来表示数值,因此无符号整型变量中可以存放的正数的范围比一般整型变量中正数的范围扩大一倍。如果在程序中定义a和b两个短整型变量(占2个字节),其中b为无符号短整型:

short a;                               //a为有符号短整型变量

unsigned short b;               //b为无符号短整型变量

 则变量a的数值范围为-32768~32767,而变量b的数值范围为0~65535。如图所示,表示有符号整型变量a的最大值(32 767)

如图所示,表示无符号整型变量b的最大值(65 535)。

 1.4字符型数据

由于字符是按其代码(整数)形式存储的,因此 C99 把字符型数据作为整数类型的一种。但是,字符型数据在使用上有自己的特点,因此把它单独列为一节来介绍。

1.4.1字符与字符代码

字符与字符代码并不是任意写一个字符,程序都能识别的。例如代表圆周率的π在程序中是不能识别的,只能使用系统的字符集中的字符,目前大多数系统采用ASCII字符集。各种字符集(包括ASCII字符集)的基本集都包括了127个字符。其中包括:

  • 字母:大写英文字母A~Z,小写英文字母a~z。
  • 数字:0~9。
  • 专门符号:29个,包括:! " # & ' () * + ,- . / : ; < = > ? [ \ ] ^ _ ' { | } ~ 
  • 空格符:空格、水平制表符(tab) 垂直制表符、换行、换页(formfeed)。
  • 不能显示的字符:空(null)字符(以\0表示)警告(以\a表示)、退格(以\b表示)回车(以r表示)等。

 1.4.2字符变量

字符变量是用类型符char定义字符变量。char是英文char acter (字符)的缩写,见名即可知义。如:

char c='?';

定义c为字符型变量并使初值为字符??的ASCII代码是63系统把整数63赋给变量c。

c是字符变量,实质上是一个字节的整型变量,由于它常用来存放字符,所以称为字符变量。可以把0~127之间的整数赋给一个字符变量。在输出字符变量的值时,可以选择以十进制整数形式输出,或以字符形式输出。如:

printf("%d %c\n",c,c);

输出结果是:

63 ?

1.5浮点型数据

浮点数类型包括 float (单精度浮点型)、 double (双精度浮点型)、 long double (长双精度浮点型)。

(1) float型 (单精度浮点型)。编译系统为每一个float型变量分配4个字节,数值以规范化的二进制数指数形式存放在存储单元中。在存储时,系统将实型数据分成小数部分和指数部分两个部分,分别存放。小数部分的小数点前面的数为0。如3.14159在内存中的存放形式如图所示:

(2) double (双精度浮点型)。为了扩大能表示的数值范围,用8个字节存储一个 double 型数据,可以得到15位有效数字,数值范围为-1.7\times 10^{-308}\sim 1.7\times 10^{308}。为了提高运算精度,在C语言中进行浮点数的算术运算时,将float型数据都自动转换为 double 型,然后进行运算。

(3) long double 型(长双精度)型,不同的编译系统对 long double 型的处理方法不同,TurboC对long double 型分配16个字节。而 Visual C++则对 long double 型和 double 型一样处理,分配8个字节。


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

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

相关文章

FCPX插件Stupid Raisins Split Pop 2(视频照片动画拆分效果插件)

Stupid RAIsins Split Pop是一个视频照片动画拆分效果插件&#xff0c;它允许您在Final Cut Pro&#xff0c;Motion&#xff0c;Premiere Pro和After Effects中使用。fcpx插件Split Screen非常适合用视频和照片创建动画分割&#xff0c;专为4K UHD和高清视频而设计&#xff0c;…

RAID5重建失败的服务器数据恢复案例

服务器数据恢复环境&#xff1a; 一台IBM某型号服务器&#xff0c;4块SAS磁盘组建了一组RAID5磁盘阵列。服务器安装的windows server操作系统&#xff0c;上面运行了一个Oracle单节点&#xff0c;数据存储为文件系统&#xff0c;无归档。该oracle数据库的数据量不大&#xff0c…

Python爬虫——批量下载微信公众号图片

目标&#xff1a; 微信公众号是现代社交媒体中最受欢迎的平台之一&#xff0c;每天都有数以百万计的人在浏览不同的公众号&#xff0c;其中大部分都包含了图片内容。如果你是一位公众号的管理员或者粉丝&#xff0c;你可能想要在本地保存一些感兴趣的图片。但是&#xff0c;微…

GIT下载安装

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

函数中的 static int 变量

#include <iostream>using namespace std;void function( ) {static int a 3 ; // 不赋值的话是 a 等于0&#xff1b;cout<<"a"<<a<<endl;aa3;cout<<"a"<<a<<endl;}int main(int argc, char** argv) {cout&l…

Apache DolphinScheduler 荣获“掘进技术引力榜”「2023 年度 ROBUST 开源项目」奖项!

经过紧张激烈的投票和严格的专家评审环节&#xff0c;“掘进技术引力榜”活动在上周的稀土掘金开发者大会上公布了「2023 年度 ROBUST 开源项目」奖项的获奖名单&#xff0c;Apache DolphinScheduler 名列其中。 Apache DolphinScheduler 代表上台领奖&#xff08;右三&#x…

蓝桥杯专题-真题版含答案-【蚂蚁感冒】【地宫取宝】【波动数列】【李白打酒】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

Java开发的打包和分发机制之jar包

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于jar包的相关操作吧 一.什么是jar包 "jar包"是Java Archive的缩写&#xff0c;它是一种用于打包Java类、资源文件、库等内容的文件格式Jar包是一种特…

flutter聊天界面-聊天气泡长按弹出复制、删除按钮菜单

flutter聊天界面-聊天气泡长按弹出复制、删除按钮菜单 在之前实现了flutter聊天界面的富文本展示内容&#xff0c;这里记录一下当长按聊天气泡的时候弹出复制、删除等菜单功能 一、查看效果 当长按聊天气泡的时候弹出复制、删除等菜单&#xff0c;可新增更多按钮 二、代码实现…

【网络安全带你练爬虫-100练】第8练:json数据的最小项提取

目录 一、目标1&#xff1a;爬取指定json中数据 二、目标2&#xff1a;循环取json中数据 三、目标3&#xff1a;提取每个数据中的某一项 四、网络安全小圈子 一、目标1&#xff1a;爬取指定json中数据 爬取data里数据 核心代码&#xff1a; dirt1 json.loads(res.text)pr…

奉劝各位项目经理,最好别参加8月PMP考试了……

早上好&#xff0c;我是老原。 上周我看到一篇介绍考证的文章&#xff0c;结果在热评看到了PMP证书。 不得不承认&#xff0c;PMP证书现在的火热程度已经超过了我们的想象。前几年我选择考PMP&#xff0c;也只是为了在求职的时候多个优势。 但是现在&#xff0c;几乎我周围所…

ThreadLocal使用场景介绍以及关于内存泄漏的探讨

目录 1. 使用场景一&#xff1a;线程隔离 2. 使用场景二&#xff1a;使用ThreadLocal进行跨函数数据传递 3. ThreadLocal导致的内存泄漏问题 4. ThreadLocal在Spring框架中的应用 5. 扩展&#xff1a;InheritableThreadLocal 转载&#xff1a;【Java】ThreadLocal使用场景…

字节、数据位、ascii码、RS232串口、modbus协议

RS232通信协议详解 - 百度文库 ASCII_百度百科 ascii码表 modebus协议 - 百度文库https://wenku.baidu.com/view/58aae6134431b90d6c85c7b6.html?_wkts_1688713246949&bdQueryascii%E7%A0%81modelbus%E7%A0%81 Modbus 的RTU、ASCII、TCP傻傻搞不清楚&#xff1f;一文全…

归并排序的应用—逆序对的个数

一、&#xff08;题目&#xff09; 给定一个长度为 n 的整数数列&#xff0c;请你计算数列中的逆序对的数量。 逆序对的定义如下&#xff1a;对于数列的第 i个和第 j 个元素&#xff0c;如果满足 i<j且 a[i]>a[j]&#xff0c;则其为一个逆序对&#xff1b;否则不是。 输…

吐血整合!风控与反欺诈相关数据来源(上)

本文会分上、下两篇&#xff0c;介绍各种风控与反欺诈相关的数据来源&#xff0c;包括其主要的数据维度和产品服务形态。 目录&#xff1a; 人行二代征信 持牌征信机构数据 司法大数据 航旅大数据 铁路大数据 税务大数据 交通大数据 电力大数据 保险大数据 人社大数据 一、人行…

vs2019打包发布c#编写的exe应用

由于该应用还要引用其它的exe应用&#xff0c;所以 .NET Framework 4.6.2 脱机安装程序Windows - Microsoft 支持 参考下面的配置即可 VS2019如何打包程序_vs2019 打包_咻咻咻...的博客-CSDN博客https://blog.csdn.net/qq_37043193/article/details/119530253?ops_request_…

JVM源码剖析之Java对象创建过程

关于 "Java的对象创建" 这个话题分布在各种论坛、各种帖子&#xff0c;文章的水平参差不齐。并且大部分仅仅是总结 "面试宝典" 的流程&#xff0c;小部分就是copy其他帖子&#xff0c;极少能看到拿源码作为论证。所以特意写下这篇文章。 版本信息如下&…

搭建帮助中心5大注意事项

在现代互联网时代&#xff0c;为企业网站建立一个优雅实用的网站帮助中心变得尤为重要。一个好的网站帮助中心可以帮助企业解决客户的难点、痛点&#xff0c;提高客户满意度、期待值&#xff0c;从而更好地留住客户&#xff0c;增加收入。 如果没有帮助中心或者是帮助中心创建…

深入理解链表:一种动态的线性数据结构

文章目录 前言1. 概述2. 单向链表3. 单向链表&#xff08;带哨兵&#xff09;4. 双向链表&#xff08;带哨兵&#xff09;5. 环形链表&#xff08;带哨兵&#xff09;6. 结语 前言 链表是我们在日常编程中经常使用的一种数据结构&#xff0c;它相比于数组具有更好的动态性能。…

Spark(17):RDD、DataFrame、DataSet三者的关系

目录 0. 相关文章链接 1. 三者的产生 2. 三者的共性 3. 三者的区别 3.1. RDD 3.2. DataFrame 3.3. DataSet 4. 三者的互相转换 4.1. 互相转换图 4.2. DataFrame 和 DataSet 转换 0. 相关文章链接 Spark文章汇总 1. 三者的产生 在 SparkSQL 中 Spark 为我们提供了两…