您的位置:首页 > 编程语言 > C语言/C++

c++:-0

2022-04-21 10:14 916 查看 https://www.cnblogs.com/pam-sh

##了解 ###特征 1、继承 2、多态 打球:打乒乓球、打篮球 3、封装

##程序开发 ###程序

  • 源程序:用源语言写的,有待翻译的程序;
  • 目标程序:源程序通过翻译程序加工以后生成的机器语言程序;
  • 可执行程序:连接目标程序以及库中的某些文件,生成的一个可执行文件;例如:Windows系统平台上的.EXE文件。

###翻译程序

  • 汇编程序:将汇编语言源程序翻译成目标程序;
  • 编译程序:将高级语言源程序翻译成目标程序;
  • 解释程序:将高级语言源程序翻译成机器指令,边翻译边执行。

程序开发过程:设计,编译,链接,测试,调试

C++是直接编译为本地机器语言的代码。 Java是半编译半解释的语言,目的是跨平台:源程序编译为中间程序,中间程序在Java虚拟机中运行,Java虚拟机再将中间程序再编译为本地机器的执行程序。【Java虚拟机主要作为解释程序】

##信息表示 ###进制表示

###进制转换 ####整数

####浮点数

###编码 原码-反码-补码 ####原码

原码是符号-绝对值表示

原码的缺点: (1)零表示不唯一 [+0]原=000...0 [-0]原=100...0 (2)进行四则运算时符号必须单独处理且运算规则复杂

####补码

  • 符号位可作为数值参加运算;
  • 减法运算可转换为加法运算;
  • 0的表示唯一

模数: n位二进制整数的模数为$2^n$; n位二进制小数的模数为2。

补数:

  • 一个数减去另一个数(加一个负数),等于第一个数加第二个数的补数,例(时钟指针):8+(-2)=8+10(mod12)=6;
  • 一个二进制负数可用其模数与真值做加法(模减去该数的绝对值)求得其补码,例(时钟指针):-2+12=10。

补码计算:

  • 借助于“反码”作为中间码;
  • 负数的反码与原码有如下关系:
  • 符号位不变(仍用1表示),其余各位取反(0变1,1变0),例如:X=-1100110原=11100110反=10011001
  • 正数的反码与原码表示相同,正数的补码与原码相同;
  • 反码只是求补码时的中间码;
  • 负数的补码由该数反码的末位加1求得。
  • 对补码再求补即得到原码。

补码的优点:

  • 0的表示唯一;
  • 符号位可作为数值参加运算;
  • 补码运算的结果仍为补码。

###浮点数表示

  • 计算机中通常采用浮点方式表示小数;
  • 实数N用浮点形式可表示为:N=M×2^E,E:2的幂,N:阶码;M:N的尾数。

###字符表示 字符在计算机中是通过编码表示的; 例如: ASCII码是一种常用的西文字符编码:用7位二进制数表示一个字符,最多可以表示$2^7=128$个字符; 《GB18030-2005信息技术中文编码字符集》是中国国家标准。

##标识符 开始:大小写字母或者下划线

###习题 (1)以下属于c++语言的特点是:(多选)

  • 支持面向对象程序设计(T)
  • 支持泛型程序设计(T)
  • 支持面向过程程序设计(T)

(2)以下字符串可以作为标识符的是(多选)

  • _(T)
  • 123
  • C++
  • Define(T)
  • int
  • cout(T):需要带命名空间才会冲突!

##基本数据类型

  • 整数类型;
  • 浮点数类型;
  • 字符类型;
  • 布尔类型。

###整数类型(int) 基本的整数类型:int 按符号分:

  • 符号的(signed)
  • 无符号的(unsigned)

按照数据范围分:

  • 短整数(short)
  • 长整数(long)
  • 长长整数( long long )

ISO C++标准并没有明确规定每种数据类型的字节数和取值范围,它只是规定它们之间的字节数大小顺序满足:(signed/unsigned)signed char ≤(unsigned) short int ≤(unsigned) int ≤(unsigned) long int ≤ long long int

###字符类型(char)

  • 容纳单个字符的编码;
  • 实质上存储的也是整数。

###浮点数类型

  • 单精度(float)
  • 双精度(double)
  • 扩展精度(long double)

###字符串类型(string)

  • 有字符串常量
  • 基本类型中没有字符串变量
  • 采用字符数组存储字符串(C风格的字符串)
  • 标准C类库中的String类(C风格的字符串)

###类型范围

###常量

  • 在程序运行的整个过程中其值始终不可改变的量;
  • 直接使用符号(文字)表示的值;
  • 例如:12,3.5,'A'都是常量。 ####整数常量
  • 十进制: 若干个0~9的数字,但数字部分不能以0开头,正数前边的正号可以省略。
  • 八进制: 前导0+若干个0~7的数字。
  • 十六进制: 前导0x+若干个09的数字及AF的字母(大小写均可)。
  • 后缀: 后缀L(或l)表示类型至少是long,后缀**LL(或ll)表示类型是long long,后缀U(或u)**表示unsigned类型。

####浮点数常量

  • 一般形式: 例如,12.5,-12.5等。
  • 指数形式: 例如,0.345E+2,-34.4E-3;

整数部分和小数部分可以省略其一。

  • 浮点常量默认为double型,如果后缀**F(或f)**可以使其成为float型,例如:12.3f。 ####字符常量

##运算符 ###复合赋值运算符 +=,-=,*=,/=,%=,<<=,>>=,&=,^=,|= 例: a += 3 等价于 a = a + 3 x *= y + 8 等价于 x = x * (y + 8)

###逗号运算符

  • 格式:表达式1,表达式2
  • 求解顺序及结果: 先求解表达式1,再求解表达式2 最终结果为表达式2的值
  • 例: a = 3 * 5 , a * 4 最终结果为60 ###关系运算符 关系表达式其结果类型为 bool,值只能为 true 或false。 例如:a > b,c <= a + b,x + y == 3

###逻辑运算符 !(非) &&(与) ||(或)

优先次序: 高 → 低

逻辑运算结果类型:bool,值只能为 true 或false ####“&&”

  • 两侧表达式都为真,结果为真;
  • 有一侧表达式为假,结果为假。

“&&” 的“短路特性”:表达式1 && 表达式2

  • 先求解表达式1
  • 若表达式1的值为false,则最终结果为false,不再求解表达式2
  • 若表达式1的结果为true,则求解表达式2,以表达式2的结果作为最终结果

####“||”

  • 两侧表达式都为假,结果为假;
  • 有一侧表达式为真,结果为真。

“||” 的“短路特性”:表达式1 || 表达式2

  • 先求解表达式1
  • 若表达式1的值为true,则最终结果为true,不再求解表达式2
  • 若表达式1的结果为false,则求解表达式2,以表达式2的结果作为最终结果

###条件运算符 表达式1?表达式2:表达式3

表达式1 必须是bool 类型

执行顺序:

  • 先求解表达式1,
  • 若表达式1的值为true,则求解表达式2,表达式2的值为最终结果
  • 若表达式1的值为false,则求解表达式3,表达式3的值为最终结果
  • 条件运算符优先级高于赋值运算符,低于逻辑运算符

例: 表达式1是bool类型,表达式2、3的类型可以不同,条件表达式的最终类型为2 和3 中较高的类型

###位运算符 ####sizeof函数 “类型名”所指定的类型,或“表达式”的结果类型所占的字节数

####按位与

将两个运算量的每一个位进行逻辑与操作

例:计算3 & 5

用途:

  • 将某一位置0,其他位不变: 例如:将char型变量a的最低位置0: a = a & 0xfe; 😭0xfe:1111 1110)
  • 取指定位: 例如:有char c; int a; 取出a的低字节,置于c中:c=a & 0xff; (0xff:1111 1111)

####按位或

将两个运算量的每一个位进行逻辑或操作

举例:计算3 | 5 用途:

  • 将某些位置1,其他位不变。 例如:将 int 型变量 a 的低字节置 1 :a = a | 0xff; ####按位异或

两个操作数进行异或:若对应位相同,则结果该位为 0,若对应位不同,则结果该位为 1

举例:计算071^052 用途:

  • 举例:使特定位翻转(与0异或保持原值,与1异或取反) 例如:要使 01111010 低四位翻转:

####按位取反

单目运算符,对一个二进制数按位取反。

例: 025:0000000000010101; ~025:1111111111101010

####按位移位

  • 左移运算(<<) 左移后,低位补0,高位舍弃;

在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。

  • 右移运算(>>) 右移后:低位:舍弃;

右移一位相当于除2,右移n位相当于除以2的n次方。

高位:

  • 无符号数:补0
  • 有符号数:补“符号位”

###类型转换 ####运算优先级

####类型转换 (1)隐式转换 自动转换,基本原则是将低类型数据转换为高类型数据。

(2)显示转换

  • 类型说明符(表达式)
  • (类型说明符)表达式
  • 类型转换操作符<类型说明符>(表达式)

类型转换操作符可以是: const_cast、dynamic_cast、reinterpret_cast、static_cast

  • 例:int(z), (int)z, static_cast(z)

##输入输出

  • “<<”是预定义的插入符,作用在流类对象cout上便可以实现项标准输出设备输出。 cout << 表达式 << 表达式...
  • 标准输入是将提取符作用在流类对象cin上。 cin >> 表达式 >> 表达式...
  • 提取符可以连续写多个,每个后面跟一个表达式,该表达式通常是用于存放输入值的变量。例如: int a, b; cin >> a >> b; ###常用I/O流操纵符 例:cout << setw(5) << setprecision(3) << 3.1415;

##循环结构 ###do-while 实现数字翻转输出:

#include <iostream>

using namespace std;

int main() {

int n, right_digit, newnum = 0;
cout << "Enter the number: ";
cin >> n;
cout << "The number in reverse order is  ";
do {
right_digit = n % 10;
cout << right_digit;
n /= 10;  /*相当于n=n/10*/
} while (n != 0);
cout << endl;
return 0;
}

##自定义类型 ###别名 ####typedef typedef 已有类型名 新类型名表 例:

typedef double Area, Volume;
typedef int Natural;
Natural i1,i2;
Area a;
Volume v;

####using using 新类型名 = 已有类型名; 例:

using Area = double;
using Volume = double;

###枚举

语法形式: enum 枚举类型名 {变量值列表};

例:enum Weekday {SUN, MON, TUE, WED, THU, FRI, SAT}; 默认情况下: SUN=0,MON=1,TUE=2,......,SAT=6

####不限定作用域

  • 枚举元素是常量,不能对它们赋值 例如有如下定义 enum Weekday {SUN, MON, TUE, WED, THU, FRI, SAT}; 不能写赋值表达式:SUN = 0
  • 枚举元素具有默认值,它们依次为: 0,1,2,......。
  • 也可以在声明时另行指定枚举元素的值,如: enum Weekday{SUN=7,MON=1,TUE,WED, THU,FRI,SAT};
  • 也可以在声明时另行指定枚举元素的值;
  • 枚举值可以进行关系运算。
  • 整数值不能直接赋给枚举变量,如需要将整数赋值给枚举变量,应进行强制类型转换。
  • 枚举值可以赋给整型变量。 ####举例

问题:设某次体育比赛的结果有四种可能:胜(WIN)、负(LOSE)、平局(TIE)、比赛取消(CANCEL),编写程序顺序输出这四种情况。

#include <iostream>
using namespace std;

enum GameResult {WIN, LOSE, TIE, CANCEL};
int main() {
GameResult result;
enum GameResult omit = CANCEL;
for (int count = WIN; count <= CANCEL; count++) {
result = GameResult(count);//强制类型转换
if (result == omit)
cout << "The game was cancelled" << endl;
else {
cout << "The game was played ";
if (result == WIN)      cout << "and we won!";
if (result == LOSE)       cout << "and we lost.";
cout << endl;
}
}
return 0;
}

###auto类型

auto:编译器通过初始值自动推断变量的类型

例如:auto val = val1 + val2; 如果val1+val2是int类型,则val是int类型; 如果val1+val2是double类型,则val是double类型。

###decltype

decltype:定义一个变量与某一表达式的类型相同,但并不用该表达式初始化变量

例如:decltype(i) j = 2;//i和j的类型不同

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: