[C/C++] 第一节 基本数据的表现

15 篇文章 6 订阅
本文介绍了数据的两种表现形式——常量和变量,详细讲解了各种类型的常量,包括整型、实型、字符和字符串常量,以及符号常量与常变量的区别。同时,阐述了变量的概念及常变量的特性。接着,文章深入探讨了数据类型,包括整型(如int、short、long)、无符号整型和字符型,以及浮点型数据(float和double),并讨论了它们的存储方式和取值范围。
摘要由CSDN通过智能技术生成

  •  个人主页:北·海
  •  🎐CSDN新晋作者
  •  🎉欢迎 👍点赞✍评论⭐收藏
  • ✨收录专栏:C/C++
  • 🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!🤗

一.数据的表现形式

数据有两种表现形式:常量和变量

  1. 常量

<1>定义:在程序运行过程中,其值不能发生改变的量,常量就是数学中的常数, 在程序中有int a =100;float b=123.4; 其中100和123.4就是常量.

<2>常用的常量有以下几种:

1.整型常量:如10010,1234,0,-123等都是整型常量

2.实型常量:十进制小数形式(例如:123.3)和指数形式(例如:12.34e3),由于计算机输出时无法表示上角和下角,则规定用e或E表示以10为底的指数,其中e或E前面必须要有数字,后面必须为整数

3.字符常量:

<1>普通字符:用但撇号引起来的字符,如'a' 'D' '3' '#'不能为'ab' '12',但撇号内只能为 一个字符,字符常量在计算机储存中是以ASCLL码的二进制形式储存

<2>转义字符:以"\"开头的,意思是将"\"后面的字符转换成另外的意思,如\n中的n并不代表n,而转换换另外一种意思为"换行"符

4.字符串常量:用双撇号将多个字符括起来,字符串常量时双撇号内的所有字符,不包括双撇号本身(例如:"ASD",代表字符串ASD)

5.符号常量:用#define指令 例如 #define PI 3.14,表示从此行开始,所有的PI都会被替换成3.14,这个句末是没有分号的,符号常量不占内存,在预编译后这个符号就不存在了.

  1. 变量

<1>.定义:变量代表一个有名字的,具体特定属性的一个存储单元,他用来存放数据,也就是存放变量的值,在程序运行过程中,变量的值是可以改变的

<2>说明:变量必须新定义后使用,定义变量时要指定变量的类型和名字(例如:int a; a = 12;其中a代表变量名,12代表变量值),变量名实际上是以一个名字代表的一个储存单元,在对程序编译链接时,编辑器会给每个变量名分配一个内存地址;从变量中取值实际上是通过变量名找到相应的内存地址,从该储存单元中读取数据.

3.常变量

<1>.定义:在定义变量时,前面加一个关键字const(例如:const int a =3;),定义为a的变量,在变量存在期间,其值不能发生改变.

<2>常变量和变量之间的异同:常变量具有变量的基本属性,有类型,占存储单元,只是不允许改变其值.

<3>常变量和符号常量(define)的区别


#define PI 3.1    //字符常量
const int PI = 3.14;//常变量

<1>字符常量在预编译时只进行字符替换,在预编译后字符常量就不存在了(全置换为3.14),对符号常量的名字是不分配存储单元的,而常变量是要分配存储空间的.

[补充]标识符

命名规则:只能由数字,字母,下划线组成,且只能由字母或下划线开头,标识符不能为c语言的关键字,并且区分大小写.

二.数据类型

在定义变量时一定要指名变量的类型,常量也是区分类型的,数据是存放在储存单元中的,储存单元是由有限个字节构成,每一个储存单元中存储的数据范围都是有限的;所谓类型,就是对数据分配存储单元的安排,包括存储单元的长度(占多少个字节)以及数据的储存形式,不同的类型分配不同的长度和储存形式

  1. 整型数据

<1>基本整形(int)

(1)一般占两个或4个字节(32位)(由编辑器决定),一个字节为8个二进制数,就是八位

(2)存储单元中的存储方式:一般为整数的补码的形式存放,一个正数的补码是其二进制形式,负数的补码是其二进制形式取反再加1(下一篇介绍原码补码反码)

(3)格式占位:%d

<2>短整型(short int)

(1)类型名为short int 或 short 一般分配2个字节(16位)

(2)存储方式:与int相同,两个字节取值范围为-32768~32767

(3)格式占位:%hd

<3>长整型(long int)

(1)类型名为:long int 或long,一般分配4个字节(32位)

(2)格式占位:%ld

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

(1)类型名:long long int或long long,一般分配8个字节(64位),这是c99新增的类型,但许多c语言 编译系统并未实现

[补充].存储单元长度

c标准要求:sizeof(short)<=sizeof(int)<=sizeof(long)<=sizeof(long long),sizeof()是测量类型或变量长度的运算符(求字节运算符)

  1. 整型变量的符号属性

变量值在存储单元中都是以补码的形式储存,存储单元中的第一个二进位制代表符号,整型变量值的范围包括负数到正数,一般有符号的为[-a,a],则无符号的为[0,2a]

<1>unsigned修饰符

(1)为了充分利用变量的范围,可以将变量定义为无符号型,可以在数据类型前面加上修饰符unsigned,指定表示该变量是"无符号整数",如果加上signed则表示有符号类型,(符号指的是负号),如果没有修饰符则默认为signed(例如signed int a等价于 int a),如果指定为unsigned则储存单元中全部二进制位都为都用做存放数值本身,而没有符号,无符号型变量不能存放负数

<2>signed修饰符

(1)有符号修饰符整形数据在存储单元中最高位代表数值的符号(0为正,1为负),其他位用做存放变量值

例如:有符号字符型(char 一个字节八位)取值范围是-128-127是因为有符号字符型最高位是符号位,0代表正数;1代表负数。有符号字符型的最大值为01111111,这个二进制值等于2^0+2^1+2^2+2^3+2^4+2^5+2^6=127。无符号的则最大值为11111111,为255

[说明]:

(1).只有整形数据(包括字符型)可以加signed和unsigned修饰符,实型数据(浮点数)不能加

(2).符号占位符:%u

(3).不能给unsigned修饰的变量赋负值,否则会出错

例如:


unsigned short a  =-1;
printf("%d",a);
/*
先将a的补码写出来为 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ,存到a里(参考源码反码的转换)
由于a是无符号型,最高位也代表数值位,则转换为十进制输出位65535
*/

3.字符型数据

由于字符是按其代码(整形)形式存储,因此c99把字符数据作为整数类型的一种,但字符数据在使用中有自己的特点

字符与字符代码

<1>字符和字符代码并不是任意写的一个字符,程序都能识别,都是系统的字符集,目前大多数系统使用的是ASCLL字符集,基本都包含127个字符

  1. 字母:a-z A-Z

  1. 数字:0-9

  1. 专门符号:29个,包括! " & ' ( ) * + , - / : ; < = > ? [ \ ] ^ _ ` { | } ~

  1. 空格符:空格,tab,垂直制表符,换行,换页

  1. 不能显示的符号:空(null)字符(以'\0'表示),警告(\a),退格(\b),回车(\r)

[说明]:ASCLL码最大为127(有的系统扩展了128-255位),可以用7个二进制数表示(ASCLL为127时,二进制为1111111,7位全1),所以在c语言中,指定用一个字节(8位)储存一个字符,字节中的第一位置为0

[例] 整数1和字符'1'是不同的概念,字符'1'只代表一个形状为'1'的字符,占一个字节,在需要时按原样输出,在内存中以ASCLL码形式储存,而整数1是以整形的方式存储,以二进制补码的形式存储,占2个或4个字节

字符变量

字符变量是用类型符char定义字符变量,例如 char a = 'c';意思为定义一个字符型变量a并且给他赋值'c',字符用单引号

<1> char a = 'c',a是字符变量,实质上是一个字节的整形变量,它一般用来存储字符,所以称字符变量,但可以把0-127之间的整数赋值给一个字符变量


printf("%d,%c",'a','a');
//将一个字符a以十进制整数输出和字符型输出
//%c表示的是字符占位符,以字符的形式输出
//以整数输出,对应ASCLL码的数字,a对应的ASCLL码为65码
//输出结果为:65,a

<2>字符变量在内存中的存储

将其对应的ASCLL码转化为二进制形式储存

例如:字符'i'的ASCLL码为49,因为字符对应的ASCLL码都为整数,他的补码即为他的二进制数,在 内存中存储对应的二进制为 0011 0001(1个字节)

<3>字符型数据的存储空间及其取值范围

[说明]

在使用有符号字符型变量时,允许存储的值为-127~128,但字符的代码不能为负,则实际只用到了0~127这一部分

浮点型数据

浮点型数据是用来表示具有小数的实数,在c语言中,实数是以指数的形式存放在存储单元中的

因为小数点位置可以变化()浮动,进而指数增减,所以称为浮点数

<1>浮点型:float(单精度浮点数),double(双精度浮点数),long double(长双精度浮点数)

<2>float型:占4个字节(32位),数值以规范的二进制数指数形式存放在存储单元中,存储时,将实型分成小数和指数两部分分别存储,小数部分的小数点前的数为0

  • 符号位(Sign) : 0代表正,1代表为负

  • 指数位(Exponent): 用于存储科学计数法中的指数数据,并且采用移位存储

  • 尾数部分(Mantissa):小数部分

<3>占位符:%f

<4>float型数据能精确到小数点后6位

<5>double型:为了扩大数据的范围,用8个字节储存double型,可得到15位有效数字,为了提高运算精度,c语言在运算中,将float型自动转化位double型

[说明]

C语言中,输出double类型(双精度实型)以及float类型(单精度实型)时,默认输出6位小数(不足六位以0补齐,超过六位按四舍五入截断)。

如果想小数点后面16位,写成%.16lf,不会自动四舍五入的,double是一个近似值,通常没有办法做的很精确。通常能精确到小数点后面5,6位,也就是说超过5,6位了可能就不准了

<6>浮点型常量:凡是以小数或指数形式出现的实数均为浮点型常量,在内存中都以指数形式存在,并且c编辑器把浮点数都按double类型处理,分配8个字节


float a  =3.1415//系统按double处理
float b  =3.1344f//系统按单精度处理

注意:每个变量都有一个确定的类型,变量是占内存的,是具体的实体,在其占用的存储单元中是可以存放数据的,而类型是抽象的,不占储存单元,不能用来存放数据


int a;  a = 3;//正确,a是存储数据的int型变量
int  a =3//错误,不能对类型进行赋值,因为不占用内存空间

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北·海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值