文章目录
第一行代码,数据存储,常量,数据类型
1.第一行代码
1.1第一行C/C++代码
#include <iostream> using namespace std; int main(int argc,char * argv[]) { cout <<"Hello world!"<< endl; }
//第一行c语言代码 #include <stdio.h> int main(int argc,char * argv[]) { printf("%s\n","Hello,world!"); return 0; }
1.2编译执行C++程序
C++代码目前CPU无法识别,CPU有且只有识别二进制内容,需要进行【编译】操作,得到可执行文件。
需要使用的工具
- g++ C++ 代码编译工具
zy@zy:~/Code$ g++ 01_第一行代码.cpp
# g++ 编译器编译结果,默认得到一个a.out 可执行文件
zy@zy:~/Code$ a./out
# 执行C++ 编译结果的a.out 可执行文件,得到程序结果
Hello world! 你好,世界!
zy@zy:~/code1/day2$ gcc 01_第一行代码.c
// gcc 编译器编译结果,默认得到一个a.out 可执行结果
zy@zy:~/code1/day2$ ./a.out
// 执行 c 编译结果的a.out可执行文件,得到程序结果
Hello,world!
1.1.3第一行代码问题总结
2.数据存储问题
2.1计算机数据存储单位
【重点】
计算机最小存储单元是字节 byte,一个字节对应8个 bit 位(二进制)
常用存储单位:
KB ==> 1024 Byte
MB ==> 1024 KB
GB == > 1024 MB
2.2数据常用进制
开发中常用的进制
十进制,二进制,八进制和十六进制
进制 | 基数范围 | 进制关系 |
---|---|---|
十进制 | 0~9 | 逢十进一 |
二进制 | 0,1 | 逢二进一 |
八进制 | 0~7 | 逢八进一 |
十六进制 | 0~9, A~F | 逢十六进一 |
数据规范要求
进制转换工作,推荐使用计算提供的计算器工具【程序员模式/编程模式】
二进制:
0001 1001(2)= 对应十进制 => 25(10)
例如:
寄存器内存状态所需要 0111 0110(2) ==> 提供十进制数据118(10)
八进制:
数据格式要求 0 开头,在一些特定情况下,开头的0 标记可以省略
0777(8) ==> 511(10)
0775(8) ==> 509(10)
十六进制:
数据格式要求0x开头,而且英文字母不区分大小写
0x111ABC <= 对于计算机而言,数据完全一致 => 0x111abc
【重点】十六进制常用于内存地址编号
2.2.3原码,反码和补码【了解,计算据规则】
冯·诺依曼计算机之父
二进制计算机理论,包括原码,反码和补码
万物皆文件思维,可以通过读写操作,控制计算机所有内容。
原码,反码和补码用于降低计算机的运算逻辑复杂度,提升计算机性能,优化计算机电路设计。
利用正整数和负整数演示原码,反码和补码
案例:
118 + (-118) = 0;
正整数:
原码,反码和补码一致,都是当前正整数对应的二进制数据情况
118(10) ==> 001 0110(2)
当前二进制数据就是正整数118的原码,反码和补码,也是当前118在内存中的存储形式。
负整数:
-118
原码:对应正整数二进制数据存储情况,最高位改为 1 表示符位号,负数形式
118(10) ==> 0111 0110(2)
反码:负数原码除符号位之外,其他位置按位取反
-118(10) = 原码 ==> 1111 0110(2)
= 反码 ==> 1000 1001(2)
补码:反码 + 1
-118(10) = 原码 =>1111 0110(2)
反码 => 1000 1001(2)
补码 => 1000 1010(2)
【负数在内存中采取补码存储】
3.常量和数据类型初步了解
3.1什么是常量
在生活中,开发中不可修改的量,都是【常量】,包括但是不限于数值。
数值相关:
1 2 3 4 5 整数
3.14 0.618 9.8 小数/浮点数
文字相关:
'1' '2' '3' '4' '5'
'A' 'B' 'C'
文字也是常量中极为重要的一环!!!
文章/字符串:
"恰同学少年风华正茂,书生意气,挥斥方遒..."
"先帝创业未半,而中道崩殂..."
3.2代码演示常量内容
//c++
#include <iostream>
using namespace std;
int main(int argc,char * argv[])
{
//整数常量
cout << 7 << endl;
cout << 100 <<endl;
//小数/浮点数常量
cout << 3.1415926 << endl; //终端展示3.14159
cout << 6.18 << endl;
//文字/字符常量
//[要求]使用英文单引号包含
cout << 'A' << endl;
cout << '9' << endl;
//文章/字符串常量
//[要求]使用英文双引号包含
cout << "奔驰大G" << endl;
cout << "宝马 mini" << endl;
//布尔类型,表示真假关系,true 对应 1 flase 对应 0
cout << true << endl;
cout << flase << endl;
}
#include <stdio.h>
int main(int argc, char * argv[])
{
// 整数常量演示
printf("整数:%d\n", 10);
printf("整数:%d\n", 521);
printf("整数:%d\n", 1314);
// 浮点数常量演示
printf("浮点数:%f\n", 5.21);
printf("浮点数:%f\n",13.14);
// 字符常量演示,字符要求使用英文单引号包含的内容,C/C++ 不推荐包含中文
printf("字符:%c\n", 'A');
printf("字符:%c\n", '1');
// 中文汉字占用字节数是 2 ~ 3 字节,字符常量无法保存完整的中文汉字,有警告
printf("字符:%c\n", '我');
// 字符串常量
printf("%s\n", "今天星期三!");
printf("%s\n", "马上放假了");
printf("%s\n", "真开心!");
return 0;
}
3.3字符常量补充
3.3.1字符常量概述
在计算机中任何一个字符对于计算机而言是一个【图片】,为了更好的管理文字【图片】给每一个字符对应一个【编码】,编码可以称之为【字符集】
3.3.2字符集
计算机中常用的字符集
GBK中国新国标,包括中文简体和少数民族文字
UTF-8万国码,支持中文,英文还有其他国家文字
ASCll码,美国信息交互标准协会指定的编码,主要包含内容是英文字母,标点符号,数字字符和键盘特定按键,国际规范要求,所有在计算机中使用的字符集前 0 ~ 127 必须是ASCll码
ASCll码中 0 ~ 31 编码对应的字符是不可见字符
ASCll中数字字符顺序为 ’0‘ ~ ’9‘【重点】
ASCll中英文字母大写编码值小于小写编码值【重点】
ASCll中英文字母大小写非连续,中间有其他标点符号【重点】
【重点/规范】操作使用字符常量,必须使用字符本身不允许使用编码值。
"hello world"; //正常使用 "10410110810811132119111114108100" // 非法使用,不建议适应==使用编码值对应字符内容,阅读性基本没有。
3.3.3转义字符【了解】
转义字符
有特定限制的字符内容,转换为无意义字符,例如:
\" 转义双引号 \' 转义单引号 \\ 转义反斜杠 \\\\转义两个反斜杠
无特定含义字符,转换为带有特征性的操作字符
\n 回车,相当于 Enter 键 \t 制表符,相当于 Tab 键 \a 蜂鸣器 alter
面试题 \40是什么? 1. \ 是一个转义字符标记 2. \ 之后要求的数据可以是八进制数据 3. 八进制数据可以省略标记 0 \40 ==> 八进制对应 040 字符 ==> sp 空格 【重点知识】 '\0' 表示编码集当中编号为 0 字符,为不可见字符,字符标记为 nul
3.3.4数据类型初步了解
针对于数据数值其他内容的一种分类操作。
以上常量的分析,可以得到以下数据类型的基本概念
1. 整数 1 2 3 4 5
2. 浮点数/小数 3.14 0.618 11.11
3. 字符/文字 'A' 'B' 'C' '1' '2' '3'
4. 字符串/文本信息 "今天星期几" "星期3"
5. 布尔类型/真假关系 true false
以上类型就是在开发中使用的基本数据类型
4.数据类型【重点】
4.1 C/C++基本数据类型
整数
数据类型 | 占用内存空间字节数 | 存储数据范围(无符号和有符号) |
---|---|---|
short | 2个字节(16bit) | 0 ~ 65535 or -32768 ~ 32767 |
int | 在32位机及其以上占4个字节(31bit) | 0 ~ 2^32 - 1 or -2^31 ~ 2^31 - 1 |
long | 在64位机及其以上占8个字节(64bit) | 0 ~ 2^64 - 1 or -2^63 ~ 2^63 - 1 |
浮点数
浮点数据,存在一定的精度问题,在操作时需要注意
数据类型 | 占用空间内存字节数 | 存储数据范围 |
---|---|---|
float | 4个字节(32bit) | 10^38 |
double | 8个字节(64bit) | 10^308 |
字符类型
数据类型 | 占用内存空间字节数 | 存储数据范围 |
---|---|---|
char | 1个字节(8bit) | 可以存储英文和标点符号 |
布尔类型
C++ 补充数据类型,在 C 语言中不支持
数据类型 | 占用内存空间字节数 | 存储数据范围 |
---|---|---|
bool | 1个字节(8bit) | true(1) or false(0) |
4.2数据类型,用于代码中的变量定义操作
4.2.1变量定义基本格式
格式:
数据类型 变量名 = 初始化数据;
数据类型:
1. 考虑存储的数据形式
2. 考虑数据存储的数据范围,够用就行
3. 考虑数据存储的后续变化范围【关注点】,例如: 立方数据,阶乘,斐波那契数列
变量名:
1. 通俗易懂,见名知意
2. 要求全部使用英文单词
=:
1. 名称为【赋值号】
2. 将赋值号右侧的数据,赋值给左侧的变量
初始化数据
1. 根据当前数据类型,合理合法的初始化数据内容
2. C/C++ 语言变量如果没有赋值数据的情况下,有可能会导致数据错乱,存在【野值】问题
4.2.2变量定义案例
整形
#c++
#include <iostream>
using namespace std;
int main(int argc, char * argv[])
{
// 数据类型 变量名 = 初始化数据;
// 整型变量定义
short num1 = 10;
int num2 = 20;
long num3 = 100;
// num1 num2 num3 都是变量,后续操作可以使用
cout << "num1 = " << num1 << endl;
cout << "num2 = " << num2 << endl;
cout << "num3 = " << num3 << endl;
// sizeof 是获取数据类型,变量占用的内存空间字节数
cout << "sizeof(short) = " << sizeof(short) << endl;
cout << "sizeof(int) = " << sizeof(int) << endl;
cout << "sizeof(long) = " << sizeof(long) << endl;
return 0;
}
#c语言
#include <stdio.h>
int main(int argc, char * argv[])
{
/*
* 变量定义格式:
* 数据类型 变量名 = 初始化数据;
*/
// 当前定义的变量,变量数据类型为 short 类型,变量名为 num1
// 存储数据为 10
short num1 = 10;
// 变量数据类型为 int 类型,变量名为 num2
// 存储数据为 200
int num2 = 200;
// 变量数据类型为 long 类型,变量名为 num3
// 存储数据为 10000
long num3 = 10000;
printf("num1 = %d\n", num1);
printf("num2 = %d\n", num2);
printf("num3 = %ld\n", num3);
short num5 = 100000;
printf("num5 = %d\n", num5);
// 03_整型变量定义案例.c:36:15: warning: overflow in implicit constant conversion [-Woverflow]
// short num5 = 100000;i
// 100000 超出了 short 类型支持的数据范围
return 0;
}
浮点数/小数
浮点类型常量赋值建议:
浮点类型常量,例如 3.5 对于计算机而言,默认数据类型为 double 类型,因为计算机仅考虑当前数据的精度完整,数据内容存储完整,不考虑数据占用的空间问题。
【建议】如果使用常量浮点类型数据给予 float 类型数据赋值操作,需要在常量之后加上一个大写的 F
float num1 = 3.5; // 正确方式,但是 3.5 计算机默认为 double 类型
// 优化
float num1 = 3.5F; // 明确告知编译器,当前 3.5F 是一个 float 类型数据。
#c++
#include <iostream>
using namespace std;
int main(int argc, char * argv[])
{
// 数据类型 变量名 = 初始化数据;
// 浮点类型变量
float num1 = 3.5F; // F 明确告知编译器,当前的 3.5为 float 类型
double num2 = 3.5;
cout << "num1 = " << num1 << endl;
cout << "num2 = " << num2 << endl;
cout << "sizeof(float) = " << sizeof(float) << endl;
cout << "sizeof(double) = " << sizeof(double) << endl;
cout << "sizeof(3.5F) = " << sizeof(3.14F) << endl; // 4 个字节
cout << "sizeof(3.5) = " << sizeof(3.14) << endl; // 8 个字节
return 0;
}
#include <stdio.h>
int main(int argc,char * argv[])
{
//数据类型 变量名 = 初始化数据;
//浮点类型变量
float num1 = 3.5F;
double num2 = 3.5;
printf("num1 = %f\n",num1);
printf("num2 = %f\n",num2);
return 0;
}
字符类型和布尔类型
#c++
#include <iostream>
using namespace std;
int main(int argc, char * argv[])
{
// 数据类型 变量名 = 初始化数据;
// 字符类型和布尔类型
char ch1 = 'A';
char ch2 = '3';
// 字符类型占用内存空间 1 个字节,中文一般占用 2 - 3 个字节
// 无法保存,存在乱码
char ch3 = '中';
cout << "ch1 : " << ch1 << endl;
cout << "ch2 : " << ch2 << endl;
cout << "ch3 : " << ch3 << endl;
cout << "sizeof(char) : " << sizeof(char) << endl;
// ret = 简拼 => result 结果
// true 和 false 是 C++ 关键字,C 语言不支持
bool ret1 = true; // true(1)
bool ret2 = false; // false(0)
cout << "ret1 : " << ret1 << endl;
cout << "ret2 : " << ret2 << endl;
cout << "sizeof(bool) : " << sizeof(bool) << endl;
return 0;
}
#c 语言中不支持 bool 类型
#include <stdio.h>
int main(int argc,char * argv[])
{
//数据类型 变量名 = 初始化数据;
char ch1 = 'A';
char ch2 = '1';
//字符类型占用内存空间 1 个字节,中文一般占用 2 - 3 个字节
// 无法保存,存在乱码
char ch3 = '中';
printf("ch1 = %c\n",ch1);
printf("ch2 = %c\n",ch2);
printf("ch3 = %c\n",ch3);
return 0;
}
4.2.3 变量定义常见问题
- 使用常量给予 float 类型变量赋值操作,建议采用大写 F 作为常量的结尾修饰
- 使用常量给予 long 类型变量赋值操作,建议采用大写 L 作为常量的结尾修饰
float num1 = 3.5F; // 明确告知计算机,当前 3.5 是一个 float 类型
long num2 = 1000L; // 明确告知计算机,当前 10000 是一个 long 类型
//原则: 严格遵守数据类型一致化
- 变量已定义,但是在后续的使用过程中,因为拼写错误导致的变量未定义。
- 变量在使用前尚未定义,从始至终未定义对应变量
野值问题
要求变量在定义之后,如果尚未赋值的情况下,不建议参与除赋值之外的其他操作。因为变量存储的数据内容尚未明确,C/C++中对应变量数据称之为【野值】,无法确定数值。
建议变量定义操作时,直接进行变量初始化操作,防止野值出现
重复定义问题【常见】
变量在一定范围内唯一,不可以重复定义,否则计算机无法对变量名称进行识别。
- 拼写错误!!!小心仔细!!!认真!!!
- 变量名称重复定义,变量名在一定范围以内唯一。
- 变量一定是先赋值,在使用,存在【野值】问题。