我们知道在冯·诺依曼体系结构中,程序代码和数据都是以二进制存储的, 对计算机系统和硬件本身而言,数据类型的概念并不存在。
那么问题来了。

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. 不同类型数据的存储形式不同

  • 整型数
    一个多字节的数据是如何存放到存储单元中的呢?

高位字节

低位字节

小端次序:便于计算机从低位字节向高位字节运算

大端次序:与人们从左到右的书写顺序相同,便于处理字符串

java同一变量多次赋值次数_数据

  • 实型数
    问题1:如何存储实型数呢?
    回答1:关键:确定小数点的位置
    问题2:如何表示实型数?
    回答2:小数形式、指数形式——科学计数法

    !

java同一变量多次赋值次数_C变量类型_02

java同一变量多次赋值次数_java同一变量多次赋值次数_03


8. 不同数据类型可参与的运算不同

  • 整型
    加、减、乘、除、求余
  • 实型
    加、减、乘、除
  • 字符型
    加、减(整数)
    对ASCII码值的运算
  • 指针类型
    加、减(整数)和比较运算