1.CPU (寄存器 → 一级缓存 → 二级缓存 → 三级缓存) → (总线[数据、地址]) → 内存 → 硬盘
寄存器64位,总线32位 = 准64位CPU
寄存器64位,总线64位 = 64位CPU
寄存器32位,总线32位 = 32位CPU
寄存器32位,总线16位 = 准32位CPU
2.内存最小存储单元 = 一位二进制(0/1)位
1bit(位)
1Byte(字节) = 8bit
内存容量 = 内存的存储单元总量
内存最小计量单位 = 字节
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB =1024GB
3.数据类型→合理的利用空间,提高存储效率
内存 →(抽象) 一维数组
基本数据类型:
char 字符型
short 短整型
int 整型
long 长整型
float 单精度浮点型(实型)
double 双精度浮点型
类型只有大小没有空间:
系统不会给类型分配空间,只有类型定义的变量分配空间
测量类型的大小:
sizeof(类型名/变量名)
-
void fun1()
-
{
-
printf("char size = %d\n", sizeof(char));// 1B = 8b
-
printf("short size = %d\n", sizeof(short));// 2B = 16b
-
printf("int size = %d\n", sizeof(int));// 4B = 32b
-
printf("long size = %d\n", sizeof(long));// 4B = 32b
-
printf("float size = %d\n", sizeof(float));// 4B = 32b
-
printf("double size = %d\n", sizeof(double));// 8B = 64b
-
}
Windows64平台(long都为4B)
32位平台

64位平台

Linux64平台(long为8B)

4.常量
在程序运行过程中,其值不能被修改,在内存文字常量区
常量只可读操作
-
void fun2()
-
{
-
// 字符常量 %c
-
printf("char = %c\n", 'a');
-
// 短整型常量 %hd
-
printf("short = %hd\n", 7);
-
// 整型常量 %d
-
printf("int = %d\n", 70);
-
// 长整型常量 %ld
-
printf("long = %ld\n", 700L);
-
// 单精度浮点型常量 %f
-
printf("float = %f\n", 3.14F);
-
// 双精度浮点型常量 %lf
-
printf("double = %lf\n", 3.14);
-
}

5.变量
在程序运行过程中,其值可被修改
系统会根据变量类型为变量开辟空间
变量可读(取值)可写(赋值)操作,必须先定义后使用
6.整型变量
变量的定义:让变量存在,系统会给变量开辟空间
变量的声明:告诉编译器该 变量已经存在,此处通过编译,不会开辟空间
变量的使用:读(取值)/写(赋值)操作,操作空间
① 变量的定义:类型名+变量名 例如:int num;
变量名的本质:空间内容的别名
变量名的命名规则:以字母、数字、下划线组成,只能以字母和下划线开头,且不能是保留关键字
变量名的初始化:在变量定义时并赋初值
-
void fun3()
-
{
-
// 变量定义
-
int num1;
-
// 变量赋值
-
num1 = 10;
-
// 变量的初始化
-
int num2 = 20;
-
}
② 变量的声明:自动识别和显示声明
自动识别:
-
void fun4()
-
{
-
// 编译器从上往下逐语句编译
-
// 变量的定义
-
int num = 10;
-
// 变量的使用
-
printf("num = %d\n", num);
-
// 自动识别声明,变量定义在使用前面
-
}
显示声明:
-
// 显示声明,告诉编译器变量存在,此处通过编译
-
// 声明时不需要赋值
-
extern int num;
-
void fun5()
-
{
-
printf("num = %d\n", num);
-
}
-
// 变量的定义
-
int num = 10;
③ 变量的使用:读/写
-
void fun6()
-
{
-
// 写操作
-
int num1 = 10;
-
printf("num1 = %d\n", num1);
-
int num2;
-
// 写操作 = 读操作
-
num2 = num1;
-
printf("num2 = %d\n", num2);
-
}
7.获取键盘输入:scanf( )根据数据格式提取键盘输入缓冲区的数据
-
void fun7()
-
{
-
int num = 0;
-
printf("请输入一个int数据:\n");
-
// 获取键盘输入
-
// scanf("提取数据的格式", 空间地址)
-
// 带阻塞,直到有数据才往下执行
-
scanf("%d", &num);
-
printf("num = %d\n", num);
-
}
8.整型的输出形式
C语言不支持二进制输出
整型的输出形式:
① 八进制(0~7) 0开头 %o
② 十进制(1~9) %d
③ 十六进制(1~9, a~f) 0x/0X开头 %x/X
格式控制符加#完整输出进制标志
不同进制的输出,不会修改数据值,只是数据的表现形势发生了变化
-
void fun8()
-
{
-
int num = 100;
-
// 八进制输出 %o
-
printf("八进制 num = %#o\n", num);// 144
-
// 十进制输出 %d
-
printf("十进制 num = %#d\n", num);// 100
-
// 十六进制输出 %x
-
printf("十六进制 num = %#x\n", num);// 64
-
}

9.有符号和无符号数的区别
有符号数:由正负之分
signed
数值二进制的最高位(最左边)为符号位 → 0正1负,其它为数据位
+1 → 0000 0000 0000 0001
-1 → 1000 0000 0000 0001
无符号数:无正负之分,全是正数
unsigned
全是数据位
1 → 0000 0000 0000 0001
① 有符号和无符号常量
-
void fun9()
-
{
-
// 10默认位有符号数 10U为无符号数
-
// signed int %d
-
printf("%d\n", 10);
-
// unsigned int %u
-
printf("%u\n", 10U);
-
// signed long %ld
-
printf("%ld\n", 10L);
-
// unsigned long %lu
-
printf("%lu\n", 10LU);
-
}
② 有符号和无符号变量
-
void fun10()
-
{
-
// 定义有符号变量 signed(可省略)
-
// signed int num = 10;
-
int num1 = 10;
-
// 定义无符号变量 unsigned
-
unsigned int num2 = 20U;
-
printf("num1 = %d\nnum2 = %u\n", num1, num2);
-
}
10.字符常量与变量:char
① 字符常量:单引号 → 'A' 、'a',单引号''作用(字符类型说明,取ASCII码值)
-
void fun11()
-
{
-
// 字符常量输出 %c
-
printf("字符常量:%c\n", 'A');
-
}
② 字符变量:类型名+变量名
char ch;
系统给变量开辟一个字节空间
-
void fun12()
-
{
-
char ch = 'A';
-
printf("ch = %c\n", ch);
-
printf("sizeof(ch) = %u\n", sizeof(ch));
-
}

③ 字符存放:字符常量与特定的数值一一对应(ASCII表)
本质存放的是字符的ASCII码值
例:如果ch存放‘A’,则其存放的是‘A’对应的ASCII码值65
-
void fun13()
-
{
-
char ch = 'A';
-
// 输出字符 %c
-
printf("ch = %c\n", ch);
-
// 输出ASCII码值 %d
-
printf("ch = %d\n", ch);
-
printf("ch = %c\n", 65);
-
}

④ 字符变量大小写转换
大写字母比小写字母小32
ch = ch - ('a' - 'A')
大写 → 小写 +32
小写 → 大写 -32
‘a’~‘b’:97 ~ 122
‘A’~‘B’:67 ~ 90
⑤ 转义字符:一些无法直接显示的字符,用‘\*’表示
-
void fun14()
-
{
-
// '\a' 警报声
-
printf("%c\n", '\a');
-
// '\n' 换行符
-
printf("##%c##\n", '\n');
-
// '\t' Table
-
printf("##%c##\n", '\t');
-
// '\r' 光标回到行首
-
printf("123%c456\n", '\r');// 456
-
// '\\' 表示一个\;
-
printf("1\\2%c3\\4\n", '\\');
-
// '%%' 表示一个%
-
printf("%%%d\n", 10);
-
}

11.0 '0' '\0' 的区别
-
void fun15()
-
{
-
printf("0 → %d\n", 0);
-
printf("'0' → %d\n", '0');
-
printf("'\\0' → %d\n", '\0');
-
}

本文深入解析了计算机内存架构,从寄存器到硬盘的数据流动路径,详细介绍了内存的基本单位及其计量方式。同时,文章涵盖了多种数据类型,如整型、字符型、浮点型等,探讨了不同类型在内存中的存储效率,以及变量、常量的概念和使用方法。
1513

被折叠的 条评论
为什么被折叠?



