C++ 基本数据类型和表达式

1. C++是一种静态类型语言(运行前指定每个数据的类型),也是一种强类型语言(对数据的操作进行严格的类型检查)。

2. bool类型数据在算术运算时true对应1,false对应0。

3. typedef给已有类型取别名

typedef <已有类型> <别名>;
4. 常量包括两种:字面常量和符号常量

    字面常量:直接写出来的

    符号常量:又称命名常量,指有名字的常量,如 const double PI=3.1415; #define PI 3.1415

5. 符号常量的作用

    1)增加程序易读性

    2)提高程序对常量使用的一致性

    3)增强了程序的易维护性

6. 定义 对比 声明

   变量定义要给变量分配内存空间,而声明没有;定义可以初始化,声明不能。

   声明: extern <类型名> <变量名>;

               头文件中使用extern语句对一个文件中的全局函数进行声明;

               函数使用一个全局变量但是还未见到其定义时使用extern语句对其进行声明。

7. 逻辑与 && 和逻辑或 || 是短路求值(快速死亡法则):当运算结果已经确定时,后面的表达式就不会再执行。


#include<iostream>
using namespace std;
int main(){
	int a=2,b=3,c=4,d=5;
	int m=2,n=2;
	(m=a<b) || (n=c>d);
	cout<<"m="<<m<<"n="<<n<<endl;
	return 0;

结果是m=1,n=2;

因为a<b 是成立的所以m=1,为真。

而“||”运算符表示“或”,有一个为真则全部为真;前半部分判断出来是真的,后半部分就不再进行运算了。

同理对于“&&”运算符,前一项为假则整个表达式为假,我们利用这个性质可以进行递归运算或者达到整洁代码的目的

8. 类型转换

    隐式类型转换 -> 显示类型转换 

    int i=-10; unsigned int j=1; i < j 的值是false,而不是true

第1部分. 隐式类型转换


又称为“标准转换”,包括以下几种情况:
1) 算术转换(Arithmetic conversion) : 在混合类型的算术表达式中, 最宽的数据类型成为目标转换类型。

int ival = 3;
double dval = 3.14159;
 
ival + dval;//ival被提升为double类型

2)一种类型表达式赋值给另一种类型的对象:目标类型是被赋值对象的类型

int *pi = 0; // 0被转化为int *类型
ival = dval; // double->int

例外:void指针赋值给其他指定类型指针时,不存在标准转换,编译出错

3)将一个表达式作为实参传递给函数调用,此时形参和实参类型不一致:目标转换类型为形参的类型

extern double sqrt(double);

cout << "The square root of 2 is " << sqrt(2) << endl;
//2被提升为double类型:2.0
//double为形参(形式参数)
//2是实参(实际参数)

//举例:

 比如你定义一个函数void add(int a, int b),这里的a和b就是形参。 

 当你进行函数调用的时候,add(1, 2),这里的1和2就是实参。

4)从一个函数返回一个表达式,表达式类型与返回类型不一致:目标转换类型为函数的返回类型


double difference(int ival1, int ival2)
{
    return ival1 - ival2;
    //返回值被提升为double类型

第2部分. 显式类型转换


被称为“强制类型转换”(cast)
C     风格: (type-id)
C++风格: static_castdynamic_castreinterpret_cast、和const_cast..

 

 

9. 操作符的优先级

*p++和(*p)++的区别:

*p++等价于*p,然后p++   

(*p)++等价于(*p),然后对*p的值进行++ 

1)按单目、双目、三目、赋值依次降低

2)按算术、移位、关系、逻辑位、逻辑依次降低

单目运算符:

是指运算所需变量为一个的运算符,又叫一元运算符

逻辑非运算符【!】、

按位取反运算符【~】、

自增自减运算符【++, –】、

负号运算符【-】、

类型转换运算符【(类型)】、

指针运算符和取地址运算符【*和&】、

长度运算符【sizeof】

双目运算符:

双目运算符就是对两个变量进行操作 


初等运算符

下标运算符【[]】、分量运算符的指向结构体成员运算符【->】、结构体成员运算符【.】 
算术运算符 
乘法运算符【*】、除法运算符【/】、取余运算符【%】 、加法运算符【+】、减法运算符【-】 

运算符 
按位与运算符【&】、按位异或运算符【^】 、按位或运算符【|】、左移动运算符【<<】、右移动运算符【>>】


关系运算符 
等于运算符【==】、不等于运算符【!=】 、关系运算符【<    >     <=     >= 】 
逻辑运算符 
逻辑与运算符【&&】 、逻辑或运算符【||】、逻辑非运算符【!】 
 
赋值运算符 
赋值运算符【=    +=    -=     *=      /=     %=      >       >=    <    <=   &=      |=     ^=  】 
逗号运算符 
逗号运算符【,】

 

三目运算符:

对三个变量进行操作;

三目运算符对三个变量进行操作,指的是计算机c语言的重要组成部分。条件运算符是唯一有3个操作数的运算符,所以有时又称为三元运算符。一般来说,三目运算符的结合性是右结合的。
对于条件表达式b ? x : y,先计算条件b,然后进行判断。如果b的值为true,计算x的值,运算结果为x的值;否则,计算y的值,运算结果为y的值。一个条件表达式绝不会既计算x,又计算y。条件运算符是右结合的,也就是说,从右向左分组计算。例如,a ? b : c ? d : e将按a ? b : (c ? d : e)执行。[1] 
<表达式1> ? <表达式2> : <表达式3>; “?”运算符的含义是:先求表达式1的值,如果为真,则执行表达式2,并返回表达式2的结果;如果表达式1的值为假,则执行表达式3,并返回表达式3的结果。 
可以理解为条件 ? 结果1 : 结果2 里面的?号是格式要求。也可以理解为是不是条件成立,条件成立为结果1否则为结果2。 
注意:在C语言中,结果1 和 结果2的类型必须一致。
 

int a = 1, b = 2, z, c = 3;

z = a > b ? a : (b > c ? b : c);

cout << "z:" << z << endl;
这样输出的结果是:z:3

???????????????????????????????????????????????????????????????

10. 表达式中操作数的类型转换

      逐个操作符进行类型转换

如: short int a; int b; double c;

        a*b/c; 先a > int, 然后(a*b) > double

11. 敲重点:

     计算过程中要注意数据的底层表示(是否溢出等)、表达式的副作用(短路求值等)。

 

 

 

 

 

 

 

 

 


————————————————
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小崔今天努力了吗?

谢谢宝贝们打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值