【一篇文章带你重温重点】C语言操作符

简介: 【一篇文章带你重温重点】C语言操作符

在这里插入图片描述


🚲算术操作符
加( + ) 减( - )乘( * )除( / ) 取模( % )

算术操作符是我们日常用的最多的,也是大家最熟悉不过的。

🌟要注意以下几点

1. 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。

2. 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。

3. % 操作符的两个操作数必须为整数。返回的是整除之后的余数。

典型错误
在这里插入图片描述

🚲移位操作符

移位操作符分左移和右移

<< 左移操作符
\>> 右移操作符

_
🌟注:移位操作符的操作数只能是整数。而且是针对二进制补码进行移动

1.左移操作符

它的移位规则:

左边抛弃、右边补0

在这里插入图片描述


2.右移操作符

移位规则:

首先右移运算分两种:

1. 逻辑移位
左边用0填充,右边丢弃

2. 算术移位
左边用原该值的符号位填充,右边丢弃

那计算机采用的是逻辑移位,还是算术移位呢???
正确答案是取决于编译器,不过大部分编译器的是采用算术移位,因为这样意义才大!!

==先补充一些计算机存储数据的知识==

在计算机中存储数据是按二进制的补码进行存储的
补码的转换公式=原码取反加一!
正数的原码反码补码是一样的!!!!!!
假设编译器是逻辑移位
在这里插入图片描述

正数右移

在这里插入图片描述

负数右移

在这里插入图片描述
所以说,只有当右移位算术移位才有实际意义,比如我们上面把-4右移,其实就是让它除2,变成-2,而逻辑右移则将这个数变成一个非常大的正数,那它的意义何在呢?

🚲位操作符

位操作符有:

& -------- 按位与
| --------- 按位或
^ -------- 按位异或
🌟 注:他们的操作数必须是整数。

通过一些练习题来理解它是最好不过的方法!

#include <stdio.h>
int main()
{
    int num1 = 1;
    int num2 = 2;
    int a=num1& num2;
    int b=num1 | num2;
    int c=num1^ num2;

    printf("a=%d  b=%d  c=%d", a, c, b);

    return 0;
}
上面结果:a=0,b=3,c=3
解释如下
在这里插入图片描述

有个小结论:任何数与0异或等于任何数,比如10^0=10
任何数与自己异或等于0,比如10^10=0
而且它们满足交换律,比如10^ 4 ^ 10= 10^ 10 ^4=0 ^ 4=4

至于为什么是这样,其实跟上面图的num1^num2一样的分析方法,自己可以尝试画一下图理解,有了这个结论就可以做一下下面这道面试题

曾经有一道变态面试

不能创建临时变量(第三个变量),实现两个数的交换。
在这里插入图片描述
#include <stdio.h>
int main()
{
    int a = 10;
    int b = 20;
    printf("交换前a = %d b = %d\n", a, b);//
    a = a ^ b;    // 其实就是a=10^20,先不用算结果
    b = a ^ b;    //然后现在b=a^b=10^20^20,所以就变成b=10^0=10

    a = a ^ b;    //这里就是a= 10 ^ 20 ^ b = 10 ^ 20 ^ 10
                //用交换律就等于10 ^ 10 ^ 20 = 0 ^ 20 = 20
    printf("交换后a = %d b = %d\n", a, b);//这样两个数就交换过来了
    

    return 0;
}

🚲赋值操作符
赋值操作符是一个很棒的操作符,他可以让你得到一个你之前不满意的值。也就是你可以给自己重新赋值。
我们创建变量并赋值叫初始化,而后面才叫赋值
在这里插入图片描述

复合赋值符

+=
--=
*=
/=
%=
\>>=
<<=
&=
|=
^=

上面的都像下图一样等价比如a*=2 等价于a=a*2
在这里插入图片描述


🚲单目操作符
! ------------ 逻辑反操作
- ------------ 负值
+ ----------- 正值
& ------------取地址
sizeof ------操作数的类型长度(以字节为单位)
~ ------------ 对一个数的二进制按位取反
-- ------------前置、后置--
++ ----------前置、后置++
* ------------ 间接访问操作符(解引用操作符)
(类型) ------ 强制类型转换

主要要注意的是前置和后置的区别

在这里插入图片描述


🚲关系操作符
\>
\>=
<
<=
!= ----------- 用于测试“不相等”
== ---------- 用于测试“相等”

关系操作符比较简单,最主要的就是下面这个
警告:
在编程的过程中== 和=不小心写错,导致的错误

在这里插入图片描述

🚲逻辑操作符
&& ------------ 逻辑与
|| --------------- 逻辑或

注意:
区分逻辑与和按位与
区分逻辑或和按位或

1&2----->0--------按位与
_
1&&2---->1-------逻辑与 两边的数为真,表达式就为真
_
1|2----->3---------按位或
_
1||2---->1----------逻辑或 其中一方为真,则表达式为真

逻辑操作符常常用于条件判断语句,比如想判断一个是是否大于100,并且小于200
在这里插入图片描述

逻辑操作符还有一个最重要的点就是‘“短路”
用一道题理解

一道360笔试题
#include <stdio.h>
int main()
{
    int i = 0,a=0,b=2,c =3,d=4;
    i = a++ && ++b && d++;
    //i = a++||++b||d++;
    printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
    return 0;
}
//程序输出的结果是什么?
a=1,b=2,c=3,d=4
根据短路原则,只有a++运算了,其余没有进行运算
在这里插入图片描述
相关文章
|
3月前
|
存储 C语言 索引
【C语言篇】操作符详解(下篇)
如果某个操作数的类型在上⾯这个列表中排名靠后,那么⾸先要转换为另外⼀个操作数的类型后执⾏运算。
72 0
|
3月前
|
程序员 编译器 C语言
【C语言篇】操作符详解(上篇)
这是合法表达式,不会报错,但是通常达不到想要的结果, 即不是保证变量 j 的值在 i 和 k 之间。因为关系运算符是从左到右计算,所以实际执⾏的是下⾯的表达式。
238 0
|
17天前
|
存储 缓存 C语言
【c语言】简单的算术操作符、输入输出函数
本文介绍了C语言中的算术操作符、赋值操作符、单目操作符以及输入输出函数 `printf` 和 `scanf` 的基本用法。算术操作符包括加、减、乘、除和求余,其中除法和求余运算有特殊规则。赋值操作符用于给变量赋值,并支持复合赋值。单目操作符包括自增自减、正负号和强制类型转换。输入输出函数 `printf` 和 `scanf` 用于格式化输入和输出,支持多种占位符和格式控制。通过示例代码详细解释了这些操作符和函数的使用方法。
31 10
|
16天前
|
机器学习/深度学习 C语言
【c语言】一篇文章搞懂函数递归
本文详细介绍了函数递归的概念、思想及其限制条件,并通过求阶乘、打印整数每一位和求斐波那契数等实例,展示了递归的应用。递归的核心在于将大问题分解为小问题,但需注意递归可能导致效率低下和栈溢出的问题。文章最后总结了递归的优缺点,提醒读者在实际编程中合理使用递归。
41 7
|
1月前
|
存储 编译器 C语言
【C语言】简单介绍进制和操作符
【C语言】简单介绍进制和操作符
154 1
|
27天前
|
存储 机器学习/深度学习 编译器
一篇文章,把你的C语言拉满绩点
一篇文章,把你的C语言拉满绩点
11 0
|
2月前
|
存储 C语言
【C语言基础】一篇文章搞懂指针的基本使用
本文介绍了指针的概念及其在编程中的应用。指针本质上是内存地址,通过指针变量存储并间接访问内存中的值。定义指针变量的基本格式为 `基类型 *指针变量名`。取地址操作符`&`用于获取变量地址,取值操作符`*`用于获取地址对应的数据。指针的应用场景包括传递变量地址以实现在函数间修改值,以及通过对指针进行偏移来访问数组元素等。此外,还介绍了如何使用`malloc`动态申请堆内存,并需手动释放。
|
1月前
|
存储 编译器 C语言
初识C语言5——操作符详解
初识C语言5——操作符详解
164 0
|
3月前
|
存储 程序员 C语言
揭秘C语言:这些核心知识你掌握了吗?一篇文章带你突破编程基础,开启高效编码之旅!
【8月更文挑战第22天】C语言作为编程基石,以简洁高效著称,历经数十年仍备受欢迎。本文通过梳理C语言的核心概念,帮助读者深入理解并提升技能。适合各水平读者。基础语法从`main`函数开始,如示例中的“Hello, World!”程序所示。C语言强调头文件包含与语句结尾的分号。变量和数据类型丰富多样,如`int`、`float`、`char`等,合理选择可优化内存使用和性能。指针用于间接访问内存,是C语言的关键特性。控制结构如循环和分支使程序逻辑更灵活。函数支持代码复用与模块化。深入学习还需掌握预处理指令、文件操作等高级特性。通过系统学习与实践,你将能更熟练地使用C语言,构建高效稳定的应用。
58 4
|
3月前
|
C语言
C语言操作符(补充+面试)
C语言操作符(补充+面试)
45 6