一、第一行代码,数据存储,数据类型和变量

文章目录

    • 第一行代码,数据存储,数据类型和变量
        • 1.第一行代码
          • 1.1 C 语言第一行代码
          • 1.2 编译执行 C 语言代码
          • 1.3 第一行代码需要注意的内容
        • 2. 数据类型
          • 2.1 计算机数据存储单位
          • 2.2 数据进制
        • 3. 常量和数据类型推演
          • 3.1 生活中常量数据
          • 3.2 常量案例代码
          • 3.3 字符特殊补充
            • 3.3.1 字符和编码集
            • 3.3.2 转义字符【了解】
            • 3.3.3 一个来自 2015 年的面试题
          • 3.4 数据类型【重点】
        • 4. 变量【重点】
          • 4.1 C/C++ 变量定义形式
          • 4.2 变量定义案例
            • 4.2.1 整型案例
            • 4.2.2 浮点类型案例
            • 4.2.3 字符类型案例
          • 4.3 变量定义常见错误/问题总结
            • 4.3.1 常量数据使用建议
            • 4.3.2 变量未定义直接使用【常见】
            • 4.3.3 野值问题【重点,一定要避免】
            • 4.3.4 重复定义问题【常见】

第一行代码,数据存储,数据类型和变量

1.第一行代码
1.1 C 语言第一行代码
// C 语言标准输入输出库头文件,最基本的 C 语言头文件
#include 

// main 函数是整个程序的入口
int main(int argc, int argv[])
{
    /*
    在控制台打印展示 hello world
    
    %s 是 C 语言打印使用的标记类型,对应的字符串
    */
    printf("%s\n", "Hello World!");
    
    return 0;
}
1.2 编译执行 C 语言代码

需要使用编译工具是 GCC,编译格式

gmy@gmy:~/CODE/day2$ gcc 01_C语言第一行代码.c
# 整体格式可以总结为 gcc 目标C语言文件.c
# 得到的最终可执行文件是一个 a.out,默认的文件名和类型, .out在Linux 系统中是终端可执行文件,类似于 Windows 操作系统的 exe 文件

执行 a.out 终端可执行文件

gmy@gmy:~/CODE/day2$ ./a.out
# ./ 表示当前工作目录的文件, . 表示当前工作目录 / 是路径分隔符
# a.out 是可执行文件
# 执行结果
Hello World!

一、第一行代码,数据存储,数据类型和变量_第1张图片

1.3 第一行代码需要注意的内容
  • 注意标点符号一定是英文符号/半角符号

  • 成双成对的标点符号一次完成,不要后续补充。仅有一下标点符号:

    “”, ‘’ , <> , [] , {} , ()

  • 注意拼写问题,注意代码颜色,如果颜色不对劲,就是有问题。

  • 注意代码格式,缩进对齐,必须提供必要的空格空行

2. 数据类型
2.1 计算机数据存储单位

计算机最小存储单位字节(byte), 一个字节对应 8 个比特位 (bit) 二进制位

存储单位的进制关系
	1024 算术进制
	1024 Byte ==> 1 KB
	1024 KB ==> 1 MB
	1024 MB ==> 1 GB
	1024 GB ==> 1 TB
	
	生产过程中使用进制是 1000 【了解】
2.2 数据进制

开发中常用的数据进制有十进制 二进制 八进制 十六进制

进制 进制基数 禁止要求
十进制 0 ~ 9 逢 10 进 1
二进制 0,1 逢 2 进 1
八进制 0 ~ 7 逢 8 进 1
十六进制 0 ~ 9,A ~ F 逢 G (16)进 1

【了解】进制数据转换过程和数据展示形式

数据展示形式

十六进制数据展示要求, 0x 开头,或者 0X 开头
	例如:
		0xABCD 0xabcd 0xff11 0x11FF
	十六进制不区分大小写
	
八进制数据展示要求,要求 0 开头,但是 0 可以省略
	例如:
		0777 0775 0555
二进制数据案例
	0111 0110(2)

数据转换过程

  • 熟练掌握计算机使用
0x11FF ABCD 十六进制
	十进制 301,968,333
	八进制 2 177 725 715
	二进制 0001 0001 1111 1111 1010 1011 1100 1101

一、第一行代码,数据存储,数据类型和变量_第2张图片

12345 八进制
	十六进制 14E5
	十进制 5,349
	二进制 0001 0100 1110 0101

一、第一行代码,数据存储,数据类型和变量_第3张图片

3. 常量和数据类型推演
3.1 生活中常量数据

整数,浮点数,字符,字符串

数值:
	10 20 30 -10 -20 -30 ==> 整数
	3.14 6.18 ==> 小数/浮点数
	
文字:字符常量使用英文单引号包含,并且 C/C++ 不推荐使用单引号包含中文内容
	'中' '好'    中文汉字
	'A' 'B' 'C'  英文字母
	'1' '2' '3'  数字字符

文本: ===> 字符串
	字符串常量使用英文双引号包含,双引号内部的所有内容都是字符串内容
	"北国风光,千里冰封,万里雪飘..."
3.2 常量案例代码
#include 

int main(int argc, char *argv[])
{
    // 整数常量演示
    printf("整数:%d\n", 10);
    printf("整数:%d\n", 3);
    printf("整数:%d\n", 1024);
    
    // 浮点数常量演示
    printf("浮点数:%f\n", 3.14);
    printf("浮点数:%f\n", 6.18);
    printf("浮点数:%f\n", 10.13);
    
    // 字符常量演示,字符要求使用英文单引号包含的内容,C/C++ 不推荐包含中文
    printf("字符:%c\n", 'A');
    printf("字符:%c\n", '1');
    // 中文汉字占用字节都是 2 ~ 3 字节,字符常量无法保存完整的中文汉字,有警告
    printf("字符:%c\n", '我'); // 有乱码
    
    //字符串常量
    printf("%s\n", "北国风光,千里冰封···");
    printf("%s\n", "晋太元中,武陵人捕鱼为业···");
    
    return 0; 
}
3.3 字符特殊补充
3.3.1 字符和编码集

任何一个字符对于计算机而言都是一个【图片】,在计算机中使用一个表格,对每个图标进行编号处理,在使用字符数据过程中,计算机会根据对应的编号,选择对应的字符内容进行展示。

嵌入式开发中,常用的编码集
	ASCII:美国信息标准化交互协会指定的编码集,包括所有的英文字符,标点符号和特殊字符串,同时要求任何一个国际流行的编码集,前 0 ~ 255 位置必须是 ASCII。
	GBK:中国国标,包括中文简体字,全部少数民族文字。
	UTF-8:万国码,包括中文简体字和其他国家文字。
	BTG5:中国繁体字编码集,主要适用于中国香港,中国澳门,中国台湾省

ASCII 重点知识点

  • 0 ~ 31 编码对应的字符是不可见字符,功能按键,例如 ESC,重点 nul 编码为 0 的字符
  • 英文大写字母的编码值是小于小写英文字母
  • 大写英文字母和小写英文字母之间非连续,中间有其他字符
  • 数字字符顺序为 ‘0’ ~ ‘9’
  • 开发中使用字符常量,请使用字符本身,不允许使用编码值
    一、第一行代码,数据存储,数据类型和变量_第4张图片
    一、第一行代码,数据存储,数据类型和变量_第5张图片
3.3.2 转义字符【了解】
将无意义字符,转换为特定含义字符
	\n 回车
	\t 制表符/tab
	\a 蜂鸣器
	
特定含义字符,转换无意义字符
	\" 需要一个 " 字符
	\' 需要一个 ’ 字符
	\\ 需要一个 \ 字符
3.3.3 一个来自 2015 年的面试题
请问
	\40 是什么???
		1. \ 是一个转义字符标记
		2. \ 之后要求的数据可以是八进制数据
		3. 八进制数据可以省略标记 0
	\40 ==> 八进制对应 040 字符 ==> sp 空格

【重点知识】
	'\0' 表示编码集当中编号为 0 字符,为不可见字符,字符标记为 nul
3.4 数据类型【重点】

开发中,根据当前数据情况,分门类别处理,选择不同的数据类型,更好管理操作数据,通过常量角度分析得到有以下数据类型

  • 整数 short int long
  • 浮点数 float double
  • 字符串【特殊类型】

整数:一般用于存储整数相关数据内容,支持负数和正数,同时可以选择当前数据非负数

数据类型 占用内存空间字节数 数据范围
short 2字节(16bit) -32768 ~ 32767
0 ~ 65535
int 4字节(32bit) -2^31 ~ 2^31 - 1
2^32 - 1
long 8字节(64bit) -2^63 ~ 2^63 - 1
2^64 - 1

int 类型占用内存字节数补充

  • 在 32 位机器及其以上占用内存空间字节数是 4 字节
  • 16位机器对应 2 个字节,8 位机器对应 1 个字节

long 类型占用内存字节数补充

  • 在 64 位机器及其以上占用内存空间字节数是 8 字节
  • 32 位机器对应 4 个字节

浮点数:用于存储小数数据,存在单精度和双精度情况,主要区别是数据存储范围和数据存储精度

数据类型 占用内存空间字节数 数据范围
float 4字节(32bit) ± 10 ^ 38
double 8字节(64bit) ± 10 ^ 308

float 单精度浮点类型 和 double 双精度浮点类型

  • float 数据存储范围小于 double
  • float 数据精度没有 double 高
  • 浮点数据精度情况在特定情况下无法满足开发需求,可能需要其他类型支持

字符类型:用于存储字符数据,但是对于中文的支持不友好

数据类型 占用内存空间字节数 数据范围
char 1字节(8bit) 对应 ASCII 数据范围
4. 变量【重点】
4.1 C/C++ 变量定义形式
数据类型 变量名 = 初始化数据
【注意】 
	开发要求,一行仅定义一个变量,并且进行初始化操作
	
数据类型:
	1. 要求见名知意,推荐:
		小驼峰命名法 studentName studentScore
		下划线命名法 student_name student_score
	2. 变量名在一定范围内唯一
	3. 变量名是操作当前变量的关键名称
	
=:
	赋值号,将赋值号右侧的数据,赋值给左侧的变量
	右侧要求必须是一个变量,不可以是其他内容
	
初始化数据:
	根据数据类型,目前的代码所需情况,原则合理合适的数据对当前变量进行初始化操作。
4.2 变量定义案例
4.2.1 整型案例
#include 

int main(int argc, char *argv[])
{
    /*
    变量定义格式:
    	数据类型 变量名 = 初始化数据;
    */
    // 当前定义的变量,变量数据类型为 short 类型,变量名为 num1
    // 存储类型为 10
    short num1 = 10;
    
    // 变量数据类型为 int 类型,变量名为 num3
    // 存储数据为 200
    int num2 = 200;
    
    //变量数据类型为 long 类型,变量名为 num3
    // 存储数据为 1000
    long num3 = 1000;
    
    printf("num1 = %d\n", num1);
    printf("num2 = %d\n", num2);
    printf("num3 = %d\n", num3);
    
    short num5 = 10000;
    print("num5 = %d\n", num5);
    
    // 03_整型变量定义案例.c:36:15: warning: overflow in implicit constant conversion [-Woverflow]
	//	  short num5 = 100000;i
	// 100000 超出了 short 类型支持的数据范围
    return 0;
}

一、第一行代码,数据存储,数据类型和变量_第6张图片

4.2.2 浮点类型案例
#include 

int main(int argc, char *argv[])
{
    // 数据类型 变量名 = 初始化数据;
    /*
    定义一个 float 类型变量,变量名为 num1
    初始化数据赋值为 3.14
    
    【建议】 3.14 常量之后使用大写 F 明确告知编译器
    当前 3.14 是一个 float 类型数据,默认情况下,
    计算机为了保证数据的精度范围,所有的浮点数
    常量默认数据类型为 double 类型
    【严格遵守数据类型一致化原则】
    */
    float num1 = 3.14F;
    
    // 定义了一个 double 类型变量,变量名为 num2
    // 初始化数据赋值为 3.14
    double num2 = 3.14;
    
    printf("num1 = %f\n", num1);
    printf("num2 = %f\n", num2);

    return 0;   
}

一、第一行代码,数据存储,数据类型和变量_第7张图片

4.2.3 字符类型案例
#include 

int main(int argc, char *argv[])
{
    //数据类型 变量名 = 初始化数据;
    // 使用字符常量给予字符变量进行赋值操作,需要使用字符本身
    //不推荐使用编码值
    char ch1 = 'A';
    char ch2 = '1';
    char ch3 = '中';
    
    printf("ch1 = %c\n", ch1);
    printf("ch2 = %c\n", ch2);
    printf("ch3 = %c\n", ch3);
    
    return 0;
}

一、第一行代码,数据存储,数据类型和变量_第8张图片

4.3 变量定义常见错误/问题总结
4.3.1 常量数据使用建议
  • 使用常量给予 float 类型变量赋值操作,建议采用大写 F 作为常量的结尾修饰
  • 使用常量给予 long 类型变量赋值操作,建议采用大写 L 作为常量的结尾修饰
float num1 = 3.5F; // 明确告知计算机,当前 3.5 是一个 float 类型
long num2 = 1000L; // 明确告知计算机,当前 1000 是一个 long 类型
// 原则: 严格遵守数据类型一致化
4.3.2 变量未定义直接使用【常见】
  • 变量已定义,但是在后续的使用过程中,因为拼写错误导致的变量未定义。
  • 变量在使用之前尚未定义,从始至终未定义对应变量

在这里插入图片描述

4.3.3 野值问题【重点,一定要避免】

要求变量在定义之后,如果尚未赋值的情况下,不建议参与除赋值之外的其他操作。因为变量存储的数据内容尚未明确,C/C++ 中对应变量的数据称之为【野值】,无法确定数值。

建议变量定义操作时,直接进行必要的初始化操作,防止野值出现

4.3.4 重复定义问题【常见】

变量在一定范围内唯一,不可以重复定义,否则计算机无法对变量名称进行识别。

一、第一行代码,数据存储,数据类型和变量_第9张图片

你可能感兴趣的:(c语言,学习,学习方法,笔记,经验分享)