【C语言:从入坑到入土】第3章:数据

第3章 数据

程序离不开数据,把数字、字母和文字输入计算机,就是希望它利用这些数据完成某些任务。例如,需要计算一份利息或显示一份葡萄酒商的排序列表。计算机语言应该有能力描述生活中的问题,故数据类型应该多种多样以适应不同情况。

3.1 变量与常量数据

有些数据类型在程序使用之前已经预先设定好了,在整个程序的运行过程中没有变化,这些称为常量(constant)。其他数据类型在程序运行期间可能会改变或被赋值,这些称为变量(variable)。

#include <stdio.h>

int main()
{
	//创建一个变量
	//类型 变量的名字 = 0;推荐
	//类型 变量的名字;不推荐
	int age = 20;
	float weight = 70.3;
	printf("2022年,我的年龄%d,我的体重%f\n",age,weight);
	//对于float - %f,对于double - %lf;,对于int - %d;

	return 0;
}

1. 变量分为全局变量和局部变量
全局变量:代码块{ }外部定义的
局部变量:代码块{ }内部定义的
2. 变量的作用域和生命周期
局部变量作用域 - 代码块{ }内部
全局变量作用域 - 整个工程
局部变量的生命周期 - 进入局部范围开始,出去局部范围结束
全局变量的生命周期 - 程序的生命周期

extern int a;//其他文件使用时,需要声明时使用该关键字

3. 常量的表达方法
①字面常量 如3.14,10,‘a’,“adhakj”
②const 修饰的常变量
const int num = 10;//num 再次不可修改,类比于动名词
③#define 定义的标识符常量
#define Num 50
④枚举常量

enum Sex
{
	//这种枚举类型的变量的未来可能取值
	man = 3,//赋初值
	woman,
	sercrt
};
enum Sex R = man;

注:当局部变量和全局变量名字起冲突的时候,局部优先

3.2 数据类型关键字

1. 关键字表格

符号含义
char字符类型
float浮点数类型
int整数类型
long长整数类型
short短整数类型
double双浮点数类型
void
signed有符号的,如正负号
unsigned无符号的
_Bool布尔值(False/True)
_complex复数类型
_Imaginary虚数类型

2. 位、字节和字
位、字节和字是描述计算机数据单元或存储单元的术语。
位(bit)是最小的存储单位,可以存储0或1(位相当于开关),位是计算机中基本构建块。
字节(byte)是计算机中常用单位。1字节为8位,故1字节有256(2 8 ^8 8)种排列组合,取值范围是(0,255)。
字是设计计算机时给定的自然存储单位。计算机中,字是其用来一次性处理事务的一个固定长度的位组。一个字的位数(即字长)是计算机系统结构中的一个重要特性。8位计算机字长有8位,32位计算机字长有32位,64位也是如此。
3. 整数
整数是没有小数部分的数,计算机以二进制数字存储整数。
例如:整数7以二进制写就是111
使用二进制编码存储整数7
同理,使用八进制和十六进制存储十进制整数也是一样,将底数幂换成8或16,进行换算。
八进制表示方法
在C/C++中,八进制开头加0,来说明这个整数是八进制,如056(十进制46)或-0645(十进制-421)。
格式控制符:%o
\ddd:ddd表示1~3个八进制的数字
十六进制表示方法
在C/C++中,十六进制开头要加0x,来说明这个整数是十六进制数,16进制以0x开头,后面跟数字0-9或字母A~F(不区分大小写),如0x123(十进制291)或-0x6fee(十进制-28654)。
格式控制符:%x
\xdd : dd表示2个十六进制数字
注:要显示各进制数的前缀0、0x和0X,必须分别使用%#o、%#x、%#X
4. 浮点数
浮点数与数学中实数的概念差不多。2.75、3.16E7、7.00 和 2e-8 都是浮点数。这里3.16E7表示3.16x10 7 ^7 7。注意,在一个值后面加上一个小数点,该值就成为一个浮点值。
浮点数存储π值

3.3 C语言中数据类型

3.3.1 整型数据

1. int 型
C语言中的整数类型可表示不同的取值范围和正负值。一般情况使用int类型即可,int类型是有符号整型,即int类型的值必须是整数,可以是正整数、负整数或零。一般来说,16位计算机int值,取值范围是-32768~32767。
①声明int类型;
②初始化变量
定义并初始化变量
③打印int值
%d称为转换说明,格式控制符。格式化字符串中的每个%d都与待打印变量列表中相应的int值匹配。
2. short int (简称 short )型
占用的存储空间可能比int类型少,常用于较小数值的场合以节省空间。与int类似,short是有符号类型。
3. long int (简称 long )型
占用的存储空间可能比int多,适用于较大数值的场合。与int类似,long是有符号类型。格式控制符是%ld
4. long long int (简称 long long)型
占用的储存空间可能比long多,适用于更大数值的场合。该类型至少占64位。与int类似,long long是有符号类型。
5. unsigned int (简称 unsigned)型
只用于非负值的场合。这种类型与有符号类型表示的范围不同,无符号的取值范围0~2 n ^n n-1(n:表示数据类型的位数),格式控制符是%u
6. 数据类型的选择
编译器会依次尝试使用int、unsigned int、long、unsigned long、long long和unsigned long long类型。
需要注意一点:如果在long类型和int类型占用空间相同的机器上编写代码,当确实需要32位的整数时,应使用long类型而不是int类型,以便把程序移植到16位机后仍然可以正常工作。类似地,如果确实需要64位的整数,应使用long long类型。
如果在int设置为32位的系统中要使用16位的值,应使用short类型以节省存储空间。通常,只有当程序使用相对于系统可用内存较大的整型数组时,才需要重点考虑节省空间的问题。使用short类型的另一个原因是,计算机中某些组件使用的硬件寄存器是16位。
内存溢出行为是未定义的行为,C 标准并未定义有符号类型的溢出规则,溢出时容易出现以下情况:
溢出结果
7. 打印
int - 格式控制符%d;
unsigned int - 格式控制符%u
long - 格式控制符%ld,在十六进制时格式控制符%lx,在八进制时格式控制符%lo
unsigned long - 在long格式控制符基础上,u替换d
short - 格式控制符%hd,在十六进制时格式控制符%hx,在八进制时格式控制符%ho
unsigned short - 在short格式控制符基础上,u替换d
long long - 格式控制符%lld,在十六进制时格式控制符%llx,在八进制时格式控制符%llo
unsigned long long - 在long long格式控制符基础上,u替换d

3.3.2 字符型数据

1. char 类型
char类型是有符号的数据类型,用于储存字符(如数字,字母或标点符号),但是从技术层面看,char是整数类型。C语言把1字节定义为char类型占用的位(bit)数,因此无论是16位还是32位系统,都可以使用char类型。
2. ASCII编码
因为char类型实际上储存的是整数而不是字符。计算机使用数字编码来处理字符,即用特定的整数表示特定的字符。最常用的编码是ASCII编码。使用ASCII编码时,注意数字和字符的区别,例如字符0对应ASCII码是48,而不是数字4。
3. 打印
①打印字符
%c - 格式控制符,打印字符
数据显示
②打印非字符(转义字符)

符号含义
\?在书写多个问号时,防止解析成其他符号
\’用于表示字符常量’
\"用于表示字符常量“
\\用于表示一个反斜杠
\a警告
\b退格
\f换页
\n换行
\t水平制表符,相当于TAB
\r回车
\v垂直制表符
\dddddd表示1~3个八进制的数字
\xdddd表示2个十六进制数字

3.3.3 Bool类型

C99标准添加了_Bool类型,用于表示布尔值,即逻辑值true和false。因为C语言用值1表示true,值0表示false,所以_Bool类型实际上也是一种整数类型。但原则上它仅占用1位存储空间,因为对0和1而言,1位的存储空间足够了。

3.3.4 可移植类型:stdint.h和inttpyes.h

C 语言提供了许多有用的整数类型。但是,某些类型名在不同系统中的功能不一样。C99 新增了两个头文件stdint.h和inttypes.h,以确保C语言的类型在各系统中的功能相同。

3.3.5 浮点型数据

浮点数的表示类似于科学记数法(即用小数乘以10的幂来表示数字)。
记数法第1列是一般记数法;第2列是科学记数法;第3列是指数记数法(或称为e记数法),这是科学记数法在计算机中的写法,e后面的数字代表10的指数。
1. float 型
C标准规定,float类型必须至少能表示6位有效数字,且取值范围至少是10的-37次方~10的+37次方。前一项规定指float类型必须至少精确表示小数点后的6位有效数字,如33.333333。
2. double 型
C语言提供的另一种浮点类型是double(意为双精度)。double类型和float类型的最小取值范围相同,但至少必须能表示10位有效数字。
3. long double 型
C语言的第3种浮点类型是long double,以满足比double类型更高的精度要求。不过,C只保证long double类型至少与double类型的精度相同。
4. 浮点型常量
正号可以省略,可以没有小数点(如:2E5)或指数部分(如:19.28),但是不能同时省略两者。
5. 打印
%f - 打印十进制记数法的float和double类型的浮点数
%e - 打印指数记数法的浮点数
%lf - 打印十进制记数法的long float 的浮点数

3.3.6 复数和虚数类型

许多科学和工程计算都要用到复数和虚数。C99 标准支持复数类型和虚数类型,但是有所保留。一些独立实现,如嵌入式处理器的实现,就不需要使用复数和虚数(VCR芯片就不需要复数)。一般而言,虚数类型都是可选项。
C11标准把整个复数软件包都作为可选项。简而言之,C语言有3种复数类型:float_Complex、double_Complex和long double _Complex。例如,float _Complex类型的变量应包含两个float类型的值,分别表示复数的实部和虚部。类似地, C语言的3种虚数类型是float_Imaginary、double _Imaginary和long double _Imaginary。

3.3.7 不同位数编译器下各数据类型的字节大小

//以char为例,表示计算类型所占空间的大小,编译器选择x86是32位,x64是64位
#include <stdio.h>

int main()
{
	printf("%d\n", sizeof(char));//sizeof() - 计算类型或变量所占空间的大小
	return 0;
}

通过上述程序的到以下结果
32位编译器
char :1个字节
char*(即指针变量): 4个字节(32位的寻址空间是2 n ^n n, 即n是32个bit,也就是4个字节。同理64位编译器)
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 4个字节
long long: 8个字节
unsigned long: 4个字节
** 64位编译器**
char :1个字节
char*(即指针变量): 8个字节
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 8个字节
long long: 8个字节
unsigned long: 8个字节

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

&玖月

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

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

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

打赏作者

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

抵扣说明:

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

余额充值