2.第一行代码,常量,数据类型

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

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码

    1. ASCll码中 0 ~ 31 编码对应的字符是不可见字符

    2. ASCll中数字字符顺序为 ’0‘ ~ ’9‘【重点】

    3. ASCll中英文字母大写编码值小于小写编码值【重点】

    4. ASCll中英文字母大小写非连续,中间有其他标点符号【重点】

    5. 【重点/规范】操作使用字符常量,必须使用字符本身不允许使用编码值。

      "hello world"; //正常使用
      "10410110810811132119111114108100"
      	// 非法使用,不建议适应==使用编码值对应字符内容,阅读性基本没有。
      

    十进制ASCII码表

八进制ASCII码表

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++基本数据类型

整数

数据类型占用内存空间字节数存储数据范围(无符号和有符号)
short2个字节(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

浮点数

浮点数据,存在一定的精度问题,在操作时需要注意

数据类型占用空间内存字节数存储数据范围
float4个字节(32bit)10^38
double8个字节(64bit)10^308

字符类型

数据类型占用内存空间字节数存储数据范围
char1个字节(8bit)可以存储英文和标点符号

布尔类型

C++ 补充数据类型,在 C 语言中不支持

数据类型占用内存空间字节数存储数据范围
bool1个字节(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++中对应变量数据称之为【野值】,无法确定数值。

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

重复定义问题【常见】

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

在这里插入图片描述

  1. 拼写错误!!!小心仔细!!!认真!!!
  2. 变量名称重复定义,变量名在一定范围以内唯一。
  3. 变量一定是先赋值,在使用,存在【野值】问题。
  • 19
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值