C语言变量常量和数据类型-基本知识概念与编程技巧(2)

本章主要讲述C语言的变量常量和数据类型

在C语言中,每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上,常量可被改变也可被赋值。当你创建一个变量时,编译器会在内存中利用声明的数据类型来分配不同的空间,不同的数据类型决定了变量占用不同的内存,以及该类型的变量所能存储的最大值和最小值。

在C语言中,数据类型主要分为两大类:整数类型和浮点类型。数据类型的设计,让人们可以根据不同的情况选择不同的类型。

整数类型如下:

数据类型存储字节大小(Windows)存储字节大小(Linux)值范围
char11-128 到 127 或 0 到 255
short22-32,768 到 32,767
int44-2,147,483,648 到 2,147,483,647
long48-2,147,483,648 到 2,147,483,647

浮点类型如下:

数据类型存储字节大小(Windows)存储字节大小(Linux)值范围精度
float441.2E-38 到 3.4E+386位有效位
double882.3E-308 到 1.7E+30815位有效位
long double8163.4E-4932 到 1.1E+493219位有效位

以float类型为例,为了打印浮点类型变量,可使用%f来处理浮点值。若要控制精度,可使用%.2f来输出仅显示两位小数的浮点数,其它同理。

关于定义变量:

下面来分析各个类型:

int类型表示基本的整数类型,不显示小数部分,而long和short也可以表示整数,平时大多数情况使用int型,根据特定需求也可以选择其它类型。

char类型也是个整数类型,也可用于指定字母和字符,其中字母字符以数字编码存储(如ASCII),char类型赋值时,需使用单引号括起,如char apple = 'A',此单引号内的字符被称为字符常量

浮点类型可表示实数,范围比整型更大。一个数小数点后面有数字,该数就是一个浮点值,其中float为单精度浮点值(1位符号,8位指数,23位小数),double为双精度浮点值(1位符号,11位指数,52位小数),若数值过大,可使用指数计数法(e计数法)表示。

在C语言中,void类型是一种特殊的数据类型,被称为无类型,此类型用于函数没有返回值

在C99标准中,提供了_Bool 型,也就是布尔类型,可表示布尔逻辑值(true或false),其中true为1,false为0。

在C99标准中,还新增了复数类型_Complex和虚数类型_Imaginary,其下面也分float、long、double类型,复数的实部类型和虚部类型都基于实浮点类型来构成。

注意:

1.浮点数并不是所有数据类型最适合的解决方案,对于例如两个很大数之间的数学运算,浮点数损失的精度更多,因为浮点数浮点数通常存储实际值的近似值。

2.整数类型前也可加入附属关键字unsigned,表示无符号整型,由于其表示正负号的第一位现在用于表示数字位,所以可表达更大的数。而signed关键字仅强调有符号类型的意图。

3.若将一个较小的常量作为long类型可在其末尾加上小写l或大写L,long long类型同理,使用ll或者LL,unsigned long long可使用ull、LLU、Ull,float类型可使用f或F。

4.若使用超过数据类型的最大值,其数值会从0开始重新计算,即整数溢出行为。

5.unsigned类型使用%u转换说明,long类型使用%ld转换说明,short类型使用%h,unsigned long类型使用%lu,long long类型使用%lld,unsigned long long类型使用%llu,而char类型使用%c,float和double类型用%f,使用指数计数法,则使用%e。

6.浮点数若使用当前数据类型能表示的最大范围值,进行某些运算过程时,可能会丢失部分精度。

7.如果用双引号括起的字符集合(字符串),无需用单引号括起普通字符和转义序列。

8.如果需要在一个源文件中引用另外一个源文件中定义的变量,需在引用的变量声明前加上 extern 关键字,例如extern int a,其算作声明而不是定义,因为在一个程序中,变量只能定义一次,但可以声明多次。

9.数据类型强制转换,用(类型说明符)(表达式)方式表示,例如b=(int)(x+y)

在C语言中,还有一类值,在程序执行期间不会改变,这些被称为常量。常量即常规的变量,只不过常量的值在定义后不能进行修改,由各类基本数据类型组成。

定义常量,可使用#define预处理器,被称作宏定义,此方式定义的是不带类型的常数,只进行简单的字符替换,这种方式可称为明示常量。若在定义变量时加上const关键字前缀,可实现定义不允许改变数值的常变量,仅作只读作用,此种方式包含数据类型。

//宏定义示例
#define PI 3.14 //一般情况下,符号常量名使用大写表示

对编译器来说,它可通过直观表现来判断其类型,例如42被识别为整型,而42.420被识别为浮点型

转义序列也是一类字符常量,可参考下表:

转义序列含义
\\\ 字符
\'' 字符
\"" 字符
\?? 字符
\a警报
\b退格键
\f换页符
\n换行符
\r回车
\t水平制表符
\v垂直制表符
\ooo一到三位的八进制数
\xhh一个或多个数字的十六进制数

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值