当我们编写C语言程序时,需要使用不同的数据类型来定义变量。数据类型就像是一种模子,用来确定变量在内存中的大小和表示方式。
想象一下,我们需要在内存中创建一个变量来存储一个整数值。我们可以选择使用int这个数据类型,它就像是一个模子,告诉计算机在内存中为这个变量预留多大的空间。类似地,如果我们需要存储一个小数,就可以选择使用float或double这样的数据类型。
数据类型还可以帮助我们规定变量能够表示的值的范围和允许的操作。比如,字符型数据类型char用于存储单个字符,而布尔型数据类型bool用于表示真或假的值。
此外,我们还可以根据需要创建自己的数据类型。比如,通过结构体,我们可以将多个不同类型的变量组合在一起,形成一个新的数据类型,以便更好地表示复杂的数据结构。
选择合适的数据类型对于程序的效率和可读性非常重要。通过正确选择数据类型,我们可以更有效地使用内存,并确保变量能够正确地存储和处理所需的数据。
1.1.类型总揽
1.2 基本数据类型
1.2.1整数类型:
char 字符(小整型), 1B
short int 或short 短整型 2B
int 整型 4B
long int 或long 长整型, (32位机)4B/8B
char是一般引用ASCII表字符, 每一个字符都有对应的数值,又称之为小整型。
目前使用最广泛的西文字符集及其编码是 ASCII 字符集和 ASCII 码( ASCII 是American Standard Code for Information Interchange 的缩写),它同时也被国际标准化组织( International Organization for Standardization, ISO)批准为国际标准。
转义字符
为啥叫转义字符呢,就是他本身己有一个字符的意义,我们给他另外一个别的意义。转意字符常起到控制的作用。
如1:输出'f'字符的ASCII值、
#include <stdio.h>
int main(){
char m='f';
printf("%c = %d", m, m);
return 0;
}
如2:char的数据可以直接和其它数值进行运算
#include <stdio.h>
int main(){
char m='f';
// 1. 读取m的ASCII值 2. 和5相加 3.赋值给m
m += 5; // m = m + 5;
printf("%c = %d", m, m);
return 0;
}
如3: 将小写的字符转成大写字符
#include <stdio.h>
int main(){
char m='f';
m -= 32; // 97-65=32
printf("%c = %d", m, m);
return 0;
}
如4: 定义不同整数类型的变量,并打印它所占的大小
#include <stdio.h>
int main(){
char a = 10;
short int b = 10;
int c = 10;
long int d = 10;
// %d 十进制整数类型, %ld 十进制的长整型
printf("a %d size is %ld B\n", a, sizeof(a));
printf("b %d size is %ld B\n", b, sizeof(b));
printf("c %d size is %ld B\n", c, sizeof(c));
printf("d %ld size is %ld B\n", d, sizeof(d));
return 0;
}
1.2.2.整型数表示范围
1.2.1实型(浮点型)::
浮点数是一种用于表示带有小数点的数值的数据类型。它由三个主要部分组成:符号、阶码和尾数。
首先是符号位,用来表示浮点数的正负。符号位为0表示正数,为1表示负数。
接下来是阶码(指数),它表示浮点数的指数部分。阶码确定了浮点数的数量级。它通常使用二进制表示,可以是正数、负数或零。
最后是尾数(有效数字),它表示浮点数的小数部分。尾数通常使用二进制表示,它决定了浮点数的精度和范围。
浮点数的表示方法通常遵循IEEE 754标准,该标准定义了单精度(32位)和双精度(64位)浮点数的表示方式。单精度浮点数使用32位来存储,双精度浮点数使用64位来存储。
需要注意的是,浮点数是一种近似表示,而不是精确表示。由于浮点数的存储空间有限,一些数值可能无法精确表示,会存在舍入误差。因此,在进行浮点数计算时,需要注意处理舍入误差可能带来的影响。
float 单精度, 4B, 常量表示:0.1f, 1.25f
double 双精度, 8B, 常量表示:0.1, 1.25, 3.333, 12e-3, 12e3
#include <stdio.h>
int main(){
float x=1.256f;
double y=23e-4;
float z = 1e2;
// %f float or double \t is <Tab>, \n 换行
printf("%f\t%f\n", x, y); // 标准输出的小数位:6位
// %.nf n保留的小数位, 如果n+1位大于等于5则进位
printf("%.2f\t%.3f\n", x, y);
printf("%.1f\n", z);
return 0;
}
#include <stdio.h>
int main(){
float x=1.256f;
double y=23e-4;
float z = 1e2;
// %f float or double \t is <Tab>, \n 换行
printf("%f\t%f\n", x, y); // 标准输出的小数位:6位
// %.nf n保留的小数位, 如果n+1位大于等于5则进位
printf("%.2f\t%.3f\n", x, y);
printf("%.1f\n", z);
return 0;
}
1.2 构造类型
由若干个相同或不同类型数据构成的集合,这种数据类型被称为构造类型。包含:数组、结构体 struct、共用体union、枚举enum
1.3 类型转换
自动类型转换
原则: 小字节类型转成大字节类型, 保证数据的精准不会丢失。
由编译自动完成。
强制类型转换
原则上:大字节类型转小字节类型, 可能存在丢失数据情况。
由用户(开发人员)自己转换。
如1:
#include <stdio.h>
int main(){
int a=10;
float b=a;
printf("%d -> %f\n", a, b);
b = 12.115567f;
// 强制类型转换 (short) b
short c = (short) b; // float 4B -> short 2B
printf("short %d\n", c);
return 0;
}
更多内容和学习资料,敬请关注微信公众号: