我们知道在冯·诺依曼体系结构中,程序代码和数据都是以二进制存储的, 对计算机系统和硬件本身而言,数据类型的概念并不存在。
那么问题来了。
1. 高级语言为什么要区分数据类型?
-更有效地组织数据,规范数据的使用
-有助于提高程序的可读性,方便用户的使用
2. 在程序设计语言中引入数据类型的好处?
-带来了程序的简明性和数据的可靠性
-有助于提高程序执行效率、节省内存空间
3. 4种基本数据类型
- 整型
int | 整型 |
long long | 长整型 |
10的9次方以内或者说32位整数,就用int型来存放;
10的18次方以内或者说64位整数,就用long long型来存放。
%d是int型的输出格式。
- 浮点型
float | 单精度 |
double | 双精度 |
float,其有效精度只有6~7位;
double,其有效精度只有15~16位。
%f是float和double型的输出格式。
对于浮点型来说,只需要记住一点,不要使用float,碰到浮点型的数据都应该用double来存储。
- 字符型
char | 字符型 |
1)字符型变量的定义方法:
char c;
char c='e';
2)字符型变量和字符常量:
如:int num;
那么num就是一个可以被随时赋值的变量;而对于一个整数本身(比如5),它并不能被改变、不能被赋值,那么可将其称为“整型常量”。char c;
那么C在这里就被称作“字符变量”,它可以被赋值;但如果是一个字符本身(比如小写字母’e’),它是一个没有办法被改变其值的东西,那么可将其称为“字符常量”。
字符常量可以被赋值给字符变量,就跟整型常量可以被赋值给整型变量一样。
在C中,字符常量使用ASCII码统一编码。
标准ASCII码的范围是0~127,其中包含了控制字符或通信专用字符(不可显示)和常用的可显示字符。
(在键盘上,通过敲击可以在屏幕上显示的字符就是可显示字符)
可显示字符:0 ~ 9 、 A ~ Z 、 a ~ z
ASCII码:48 ~ 57 、 65 ~ 90 、 97 ~ 122
如果记不住,只要知道小写字母比大写字母的ASCII码值大32。
注意:为了区分是作为字符变量还是字符常量出现。
字符常量(必须是单个字符)必须用单引号标注。
%c是char型的输出格式。
3)转义字符
ASCII码中有一部分是控制字符,是不可显示的。
对一些常用的控制字符,C中可以用一个右斜线加一些特定的字母来表示。
由于这种情况下斜线后的字母失去了本身的含义,因此又称为“转义字符”。
“\n"表换行;”\t"表Tab键。
比较常用的转义字符有下面两个:
“\n” 代表换行
“\0” 代表空字符NULL,其ASCII码为0,请注意"\0"不是空格
程序示例1:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
char c1='z',c2='j',c3=117;
printf("%c%c%c",c1,c2,c3);
return 0;
}
输出结果:
zju
程序示例2:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int num1=1,num2=2;
printf("%d\n\n%d",num1,num2);
printf("%c",7);
//ASCII为7的字符是控制字符,并且是控制响铃功能的控制字符,不出意外的话,计算机会响一下
return 0;
}
输出结果:
1
2
4)字符串常量
字符串是由若干字符组成的串。
在C中没有单独一种基本数据类型可以存储(C++中有string类型),只能使用字符数组的方式。
字符串常量由双引号标记。
字符串常量可以作为初值赋给字符数组,并使用%s的格式输出。
程序示例1:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
char str1[25] = "wo ai de ren bu ai wo";
//由25个char字符组合而成的字符集合,称为字符数组
char str2[25] = "so sad a story is.";
printf("%s,%s",str1,str2);
return 0;
}
输出结果:
wo ai de ren bu ai wo,so sad a story is.
注意:不能把字符串常量赋值给字符变量,因此char c="abcd";
的写法是不允许的。
- 布尔型
布尔型在C++中可以直接使用,但是C语言中必须添加stdbool.h
头文件才可以使用。
整型常量在赋值给布尔型变量时会自动转换为true(非零)或者false(零)。
true 和 false 在存储时分别为 1 和 0 。
4. 如何计算变量占内存空间的大小?
- 用sizeof运算符
- 一元运算符
5. 用sizeof运算符计算变量占内存空间的大小的好处?
- 增加程序的可移植性
- 编译时执行的运算符,不会导致额外的运行时间开销
6. sizeof运算符一般形式
语法形式 | 运算结果 |
sizeof(类型) | 类型占用的内存字节数 |
sizeof(变量或表达式) | 变量或表达式所属类型占的内存字节数 |
7. 不同类型数据的存储形式不同
- 整型数
一个多字节的数据是如何存放到存储单元中的呢?
高位字节 | 低位字节 |
小端次序:便于计算机从低位字节向高位字节运算
大端次序:与人们从左到右的书写顺序相同,便于处理字符串
- 实型数
问题1:如何存储实型数呢?
回答1:关键:确定小数点的位置
问题2:如何表示实型数?
回答2:小数形式、指数形式——科学计数法
!
8. 不同数据类型可参与的运算不同
- 整型
加、减、乘、除、求余 - 实型
加、减、乘、除 - 字符型
加、减(整数)
对ASCII码值的运算 - 指针类型
加、减(整数)和比较运算