数据类型是计算机程序中用来表示数据的类别,它们定义了数据的大小、存储方式和可执行的操作。在编程中,数据类型非常重要,因为它们决定了变量可以存储什么类型的值以及可以进行哪些操作。
常见的数据类型包括:
整数类型(Integer):用于存储整数值,如int、long等。浮点数类型(Floating-point):用于存储小数或实数值,如float、double等。字符类型(Character):用于存储单个字符,如char。布尔类型(Boolean):用于存储真(true)或假(false)的值,如bool。字符串类型(String):用于存储一系列字符组成的文本,如string。数组类型(Array):用于存储一组相同类型的数据元素,如int[]、float[]等。结构体类型(Struct):用于组合不同类型的数据元素,形成一个新的数据类型。指针类型(Pointer):用于存储内存地址的变量,通常用于动态内存分配和函数参数传递。枚举类型(Enumeration):用于定义一组命名的常量值,如enum Color {RED, GREEN, BLUE}。联合体类型(Union):类似于结构体,但所有成员共享同一块内存空间,只能同时使用其中一个成员。根据编程语言的不同,可能还存在其他特定的数据类型。选择合适的数据类型对于编写高效、可读性强的程序至关重要。
这里我们取前几种数据类型简单分析
1.整型
概念
表达数据类型的数据为整数
需要注意的地方
1. int 的本意是integer,即整数的意思。
2. int a代表在内存中开辟一块区域,称为a,用来存放整数,a称为整型变量。
3. 变量a所占用的内存大小,在不同的系统中是不一样的,64位系统 典型的大小是4字节。
4. 变量a有固定的大小,因此也有取值范围,典型的范 是:-2147483648到2147483647。
整型修饰符
short:用来缩短整型变量的尺寸,减少取值范围并节省内存,称为整型。
long:用来增长整型变量的尺寸,增大取值范围并占用更多的内存,称为长整型。
long long:用来增长整型变量的尺寸,增大取值范围并占用更多的内存,称为长长整型。
unsigned:用来去除整型变量的符号位,使得整型变量只能表达非负整数。
signed:表示有符号,一般情况下省略。
需要注意的地方
1. int 的本意是integer,即整数的意思。
2. int a代表在内存中开辟一块区域,称为a,用来存放整数,a称为整型变量。
3. 变量a所占用的内存大小,在不同的系统中是不一样的,64位系统典型的大小是4字节。
4. 变量a有固定的大小,因此也有取值范围,典型的范围是:-2147483648到2147483647。
整型修饰符
short:用来缩短整型变量的尺寸,减少取值范围并节省内存,称为整型。
long:用来增长整型变量的尺寸,增大取值范围并占用更多的内存,称为长整型。
long long:用来增长整型变量的尺寸,增大取值范围并占用更多的内存,称为长长整型。
unsigned:用来去除整型变量的符号位,使得整型变量只能表达非负整数。
signed:表示有符号,一般情况下省略。
short int a; //短整型 -10000
long int b; //长整型 -10000000000
long long int c; //长长整型 -100000000000000000
unsigned int d; //无符号整型 10000
unsigned short int e; //无符号短整型
unsigned long int f; //无符号长整型
unsigned long long int g; //无符号长长整型
使用整型修饰符后,关键字int可以省略。
short a; //短整型
long b; //长整型
long long c; //长长整型
unsigned d; //无符号整型
unsigned short e; //无符号短整型
unsigned long f; //无符号长整型
unsigned long long g; //无符号长长整型
符号位
有符号的整型数据,首位为符号位,0表示正数,1表示负数。
无符号的整型数据,没有符号位。
编码形式:(计算机中存储和运算的都是补码)
原码:正数直接使用二进制来表达,比如a=100,在内存中是00...001100100
补码:负数用绝对值取反加一来表达,比如a=-3,在内存中是11...1111111101
注意负数的补码在取反加一的时候,符号位是不变的。
编码形式:(计算机中存储和运算的都是 补码)
原码:正数直接使用二进制来表达,比如a=100,在内存中是 00...001100100
补码:负数用绝对值取反加一来表达,比如a=-3,在内存中是 11...1111111101
注意负数的补码在取反加一的时候,符号位是不变的。
数据表示范围:
溢出:
超出数据所能表达的范围,称为溢出,就像汽车里程表,最大值和最小值是相邻的。
进制:源码中可以使用八进制、十进制或者十六进制,但实际数据中一律是二进制。
十进制(默认), 比如 1234。
八进制,比如 012 (0~7),013中0表示八进制的标识符,不可省略。
十六进制,比如0x6FFAB,0xaa1234,(0~9 ~a(10) ~ f(15)),一个F表示四个1。 0x 为十六进制的标识符,不可省略。
格式控制符
int 整型:%d
unsigned int 无符号整型: %u
short整型:%hd,h代表half,即一半的存储字节
long整型:%ld
long long整型:%lld
显示不同进制的前缀 : %#o、%#x
2.浮点型(实型)
概念
用来表达实数(有理数和无理数)的数据类型
分类
单精度浮点型(float),64位机中典型尺寸是4字节
双精度浮点型(double),64位机中典型尺寸是8字节
长双精度浮点型(long double),64位机中典型尺寸是16字节
占用内存越多,能表达的精度越高
3,字符型
计算机中存储都是1和0,因此各种字符都必须被映射位某个数字才能存储到计算机中,这种映射关系形成的表称为ASCII码表。
字符本质上就是一个单字节的整型,支持整型所有的运算。
ascll表我们记少不记多,记住重点的几个推就行
0 ---> 空字符
32 ---> 空格字符 ' '
48 ---> 数字字符 '0'
65 ---> 大写字母 'A'
97 ---> 小写字母 'a'
转义字符
转义字符,所有的ASCII码都可以使用\数字(一般是8进制数)来表示,而是在c 中定义一些\字母来区分原来字母的含义,我们把这种方式称为转义比如
字符 : 'n'表示 字母 n
字符 :'\n' 表示 回车键
常用的转义字符有:
'\t' : 水平制表符 tab键
'\b' : 退格符
'\a' : 告警符
'\ddd' : ddd表示8进制数,输出该数是对应ASCII表的8进制
// 注意\ddd 是\后面只能写3个8进制数,0-7
'\xhh' : xhh表示十六进制,输出该数是对应ASCII表的十六进制
//printf("'\xhh'");写法错误
// 注意\hh 是\x后面只能写2个16进制数,0-f
4.布尔类型(重点)
概念
布尔型数据只有真、假两种取值,非零为真,零为假。
注意
1. 逻辑真除了 1 之外,其他任何非零数值都表示逻辑真,等价于 1。
2. 使用布尔型 bool 定义变量时需要包含系统头文件 stdbool.h。
3. 布尔型变量在计算的时候,使用的是数值 1 或 0 。
布尔型数据常用在逻辑判断、循环控制、函数返回等场合。
bool只有两种状态,要么为1(真),要么为0(假)
不管对bool赋予任意值,非零为真零为假
5.字符串
定义:双引号引起来的字符序列。
在内存中的存储
在内存中实际上是多个连续字符的组合 任何字符串都以一个'\0'作为结束标记
注意:有关与不同的编码格式对应存储中文空间问题:
在GBK编码格式的文件当中,一个中文占用2个字节
在UTF-8编码格式的文件当中,一个中文占用3个字节,linux操作系统默认文
件格式为UTF-8编码格式,如果文件不是UTF-8则会显示乱码。
6.常量与变量
概念
不可改变的内存称为常量,可以改变的内存称为变量
常量的类型:
类型转换
概念:不一致但相互兼容的数据类型,在同一表达式中将会发生类型转
换。
转换模式:
隐式转换:系统按照隐式规则自动进行的转换(低精度到高精度)
强制转换:用户显式自定义进行的转换
隐式规则:从小类型向大类型转换,目的是保证不丢失表达式中数据的
精度
7.数据类型的本质
概念:各种不同的数据类型,本质上是用户与系统对某一块内存数据的解释方式的约定。
推论:
类型转换,实际上是对先前定义时候的约定,做了一个临时的打破。理论上,可以对任意的数据做任意的类型转换,但转换之后的数据解释不一定有意义。
总结:其实就是申请一块对应数据类型的空间来存放数据,称为数据类型
8、整型数据尺寸
概念:整型数据尺寸是指某种整型数据所占用内存空间的大小,C语言标准并未规定整型数据的具体大小,只规定了相互之间的 “ 相对大小 ”
比如:
short 不可比 int 长
long 不可比 int 短
long 型数据长度等于系统字长
系统字长:CPU 一次处理的数据长度,称为字长。比如32位系统、64位系统。
典型尺寸:
char 占用1个字节
short 占用2个字节
int 在16位系统中占用2个字节,在32位和64位系统中一般都占用4个字节
long 的尺寸等于系统字长
long long 在32位系统中一般占用4个字节,在64位系统中一般占用8个字节