> 文章列表 > c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换

c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换

c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换

c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换

2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,此时学会c++的话,
我所知道的周边的会c++的同学,可手握10多个offer,随心所欲,而找啥算法岗的,基本gg
提示:系列c++学习的基础和高阶知识,用于公司生产实践中,实实在在的公司部署产品要用的,因为c++速度快,
而java和Python速度慢,自然往硬件里面部署算法啥的,都得用c++或者c,因此本科学的c很重要,后来的Python或者java就没有那么重要了,
c/c++系列文章:
【1】c++:c语言优缺点,visual studio2019如何新建项目,写hello world程序
【2】c/c++:gcc安装,gcc编译hello world文件,system函数调用系统命令,sleep函数
【3】linux下gcc的编译过程和功能,预处理,编译,汇编,链接,.c预处理为.i文件.s文件.o文件.exe文件
【4】c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键
【5】c/c++:数据类型,常量变量,标识符,有符号整型,无符号unsigned,字符类型,字符串类型,实数类型,浮点型,科学计数法
【6】c/c++:2进制、8进制、10进制、16进制和进制之间的转换,c语言输出匹配格式%
【7】c/c++:原码,反码,补码和常见的数据类型取值范围,溢出
【8】c/c++:类型限定符,printf输出格式,putchar,scanf,getchar


文章目录

  • c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换
    • @[TOC](文章目录)
  • c/c++:算术运算符
  • 赋值运算符=,等号是==
  • 比较运算符
  • 逻辑运算符:与或非
  • 运算符优先级
  • 三目运算符?:
  • 逗号运算符,
  • 数据类型转换
  • 总结

c/c++:算术运算符

c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换
位运算是很重要的。

后续重点才说

c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换
加减乘除咱们不多说

*乘法
/除法
除法看你打印什么?%d的话,它就取整
%f才会有小数点吧
不对,是定义数据类型为double才会有小数

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>//很多库后续调用各种函数都需要用的void f14(void)//这同一个工程下面函数还不让重名呢
{int a = 10 / 20;//自动就取整了printf("%d\\n", a);printf("%f\\n", 10 / 20);//还是自动取整了double b = 10;double c = 20;printf("%f\\n", b / c);
}int main(void)
{f14();system("pause");return 0;
}

c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换
取余运算,好说
除模取余
10%3
商3,取余为1
好说

++自增++

–自减–
=++a,先a+1,再赋值给前面的等号
=a++,先赋值给前面的等号,再a+1
c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换


void f15(void)//这同一个工程下面函数还不让重名呢
{int a = 10;int b = ++a;//a=11,a要先自己增加哦,b=11printf("%d\\n", a);printf("%d\\n", b);
}

c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换

`
void f15(void)//这同一个工程下面函数还不让重名呢
{
int a = 10;

//int b = ++a;//a=11,a要先自己增加哦,b=11
int b = a++;//b=10,然后才是a自己增加哦,a=11printf("%d\\n", a);
printf("%d\\n", b);

}`c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换
看懂了吗,++a是a先自增
a++是a后自增

同理
–a也是a先自减
a–是a后自减


void f16(void)//这同一个工程下面函数还不让重名呢
{int a = 10;int b = --a;//a=11,a要先自己减哦,b=11//int b = a--;//b=10,然后才是a自己减哦,a=11printf("%d\\n", a);printf("%d\\n", b);
}

c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换

void f16(void)//这同一个工程下面函数还不让重名呢
{int a = 10;//int b = --a;//a=11,a要先自己减哦,b=11int b = a--;//b=10,然后才是a自己减哦,a=11printf("%d\\n", a);printf("%d\\n", b);
}

c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换

赋值运算符=,等号是==

c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换
a+=10等价于
a=a+10
加减乘除模都一样

比较运算符

c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换

==等于
!=不等于
c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换

逻辑运算符:与或非

逻辑非!取反
c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换
0为假
非0为真【1到无穷大都是真】


void f17(void)
{int a = 1;printf("%d\\n", !a);
}

c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换
逻辑与&&好说,全真才真,有假全假
逻辑或||好说,全假才假,有真全真
c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换

运算符优先级

最好是()来区分
其他的都是容易混淆的
c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换
c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换
c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换
整体来说,记住特定,由高到地
[]
()
++自增,
–自减
强转类型
sizeof

先乘除
取余
后加减

逻辑运算

三目运算符,条件运算

赋值运算

逗号,最次
那些写代码不加小括号的是垃圾程序员。
那些写代码不加小括号的是垃圾程序员。
那些写代码不加小括号的是垃圾程序员。

最好写小括号,否则别人怎么记忆。

三目运算符?:

表达式1?表达式2:表达式3

表达式1:是判别条件表达式
如果为,三目运算取值为表达式2
如果为,三目运算取值为表达式3

void f18(void)
{int a = 10;int b = 20;int flag = a > b ?  1 : 2;//试问a>b吗?是真,则flag取1//否则,flag取2printf("%d\\n", flag);
}

c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换
这再python和java中,我已经用很多了
哟其实java中练习数据结构与算法时搞的

void f18(void)
{int a = 10;int b = 20;int flag = a > b ?  1 : 2;//试问a>b吗?是真,则flag取1//否则,flag取2printf("%d\\n", flag);printf("%s\\n", a > b ? "a>b" : "a<b");
}

c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换
很简单的,当初第一次我学习这个玩意时还不熟悉,不习惯,经常记不住。

c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换
写代码加括号!!
不要漏掉括号,否则优先级很难看
虽然理论上没错,但是我们是人,写代码方便给人看
不是装逼

c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换

逗号运算符,

写逗号,的程序员
没有意义,就是炫技,仅此而已,装逼而已


void f19(void)
{int a=10, b=20, c=30;int x = (a = 1, b = 2, c = 5);//我的理解是不是a=1赋值,然后b=2,c=5已经赋值好了//然后a赋值给x,然后是b,然后是c//,因为逗号最晚发生,所以赋值一定是逗号最后的printf("%d\\n", x);printf("%d\\n", a);printf("%d\\n", b);printf("%d\\n", c);
}

c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换
调换bc位置


void f19(void)
{int a=10, b=20, c=30;int x = (a = 1, c = 5, b = 2);//我的理解是不是a=1赋值,然后b=2,c=5已经赋值好了//然后a赋值给x,然后是b,然后是c//,因为逗号最晚发生,所以赋值一定是逗号最后的printf("%d\\n", x);printf("%d\\n", a);printf("%d\\n", b);printf("%d\\n", c);
}

c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换

数据类型转换

隐式类型转换,编译器自动悄悄干
或者赋值时,自动转

int r = 3;
float s = 3.14*r*r;//面积求出来是double,最后隐式转换为float

显示类型转换,
c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换
double表达范围最大了
long和float类似长
无符号大于有符号范围

void f20(void)
{int a = 321;char ch = a;printf("%c\\n", ch);//超过128了哦,gg

c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换
char最大范围128
你321
不行哦

这样就65是咋来的呢
321搞成二进制,放入char
8bit,7位有效位,最高是0
c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换

丢了1
懂了没

所以为啥说范围小的类型,可以转范围大的
而范围大的没法转范围小的,会出错

强制数据类型的格式:
(目标数据类型)待转换的变量/表达式

void f20(void)
{float a = 3.6;int weight = 4;double price = a * weight;printf("价格%lf\\n", price);//}

c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换
要不你抹零

void f20(void)
{float a = 3.6;int weight = 4;double price = a * weight;printf("价格%d\\n", (int)price);//}

c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换


void f20(void)
{float a = 3.6;int weight = 4;double price = a * weight;int p2 = (int)(a * weight);printf("价格%d\\n", (int)price);//printf("价格%d\\n", p2);//}

c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换
后面的括号不加的话,强制类型转换 的优先级要比 加减乘除 高哦

往往用于函数调用时,实参给形参传递值时,需要匹配数据类型,强行搞一把

后续malloc返回值是void*
它是泛型
任意一种数据即可,你可以赋值给*p地址,我们就需要强转它【malloc表达式】为整型指针类型。
c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换

c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换


总结

提示:重要经验:

1)
2)学好c++,即使经济寒冬,手握10个大厂offer绝对不是问题!
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。