详解操作符(上)

简介: 详解操作符(上)

1 操作符分类

操作符包括:算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符、逗号表达式、下标引用、函数调用和结构成员。

2 算术操作符

加 减 乘 除 取模(取余)

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

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

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

3 移位操作符

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

移位操作符的操作只能是整数  

左移和右移的都是补码,但是打印出来的都是原码对应的十进制。(补码减一,除符号位 其它按位取反)

知识点:

原码反码补码

整数有3种二进制的表示形式(任何整数都可以表示出原码 反码 补码)

整数在内存中储存的是补码

正整数:原码 反码 补码 相同

负整数: 原码 反码 补码不同,要进行计算

移位操作符,正数不用管 ,负数记得补码变原码。

3.1 左移操作符

移位规则: 左边抛弃、右边补零(指对应二进制的左移和右移)

知识点: a的值还是3,并没有发生变化,只是一种运算。      a<<1只是展现a左移一位的效果,a的值 在没有赋值的情况下 并没有发生变化。

3.2 右移操作符

移位规则:

首先右移运算分两种:(到底是逻辑右移还是算数右移,取决于编译器。我们常见的编译器都是算术右移)

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

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

(注意,负数,回归原码是10000000000000000000000000000001,这个数是-1,不是2^32+1)

警告:

可以左移正数,可以右移正数,但是不可以左移负数 ,右移负数。例如:a<<-3.这是标准为定义的。

4 位操作符

注意:(正负数都可以,补码进行操作,打印的是原码)

对应的操作也是二进制位的操作(补码操作)(int 32位)

上图都是正数操作,以便方便叙述,所以前面的0在这里省略。

4.1 不创建临时变量,进行两个数交换

代码1展示:(有局限性,不能解决全部情况,因为int是有范围限制的,万一a和b这两个数非常大,a+b超过int的范围,那么就会出现错误)

1. #include <stdio.h>
2. int main()
3. {
4.  int a = 2;
5.  int b = 3;
6.  printf("%d %d\n", a, b);
7.  a = a + b;
8.  b = a - b;
9.  a = a - b;
10.   printf("%d %d", a, b);
11.   return 0;
12. }

代码2展示:

两个相同的数异或,是0;0和任何数异或,还是任何数。a^b^b = a

1. #include <stdio.h>
2. int main()
3. {
4.  int a = 2;
5.  int b = 3;
6.  printf("%d %d\n", a, b);
7.  a = a ^ b;
8.  b = a ^ b;//a^b^b = a
9.  a = a ^ b;//a^b^(原来的a) = 原来的b
10.   printf("%d %d", a, b);
11.   return 0;
12. }

5 赋值操作符

=   赋值操作符

a = b = x+1;    分析:x+1的值赋给b,的值赋给a,但是不提倡用(不清晰爽朗 不易与调试)

知识点:

左值:是可以放在等号左边,一般是一块空间

右值:是可以放在等号右边的,一般是一个值(a = 10)或者是一块空间的内容(a = 10 b = a)

复合赋值符:

别的都类似于上图所示

相关文章
|
10月前
|
安全 编译器 C++
【C++11】可变模板参数详解
本文详细介绍了C++11引入的可变模板参数,这是一种允许模板接受任意数量和类型参数的强大工具。文章从基本概念入手,讲解了可变模板参数的语法、参数包的展开方法,以及如何结合递归调用、折叠表达式等技术实现高效编程。通过具体示例,如打印任意数量参数、类型安全的`printf`替代方案等,展示了其在实际开发中的应用。最后,文章讨论了性能优化策略和常见问题,帮助读者更好地理解和使用这一高级C++特性。
331 4
|
11月前
|
机器学习/深度学习 人工智能 自然语言处理
【AI大模型】BERT模型:揭秘LLM主要类别架构(上)
【AI大模型】BERT模型:揭秘LLM主要类别架构(上)
|
消息中间件 RocketMQ
RocketMQ不同版本的下载
RocketMQ不同版本的下载
160 1
|
Swift 数据安全/隐私保护
SwiftUI 中自定义 modifier
在 Swift UI 中,自定义 Modifier 是一种强大的方式,可以让你轻松地封装和重用视图的样式和行为。在本文中,我们将探讨如何使用自定义 Modifier ,以便在应用程序中保持一致的外观和风格。
|
网络协议 安全 Java
python中socket关闭连接和释放资源
【4月更文挑战第6天】本教程讲解了网络通信后如何正确关闭连接和释放资源,以保证程序稳定性、性能及避免资源泄露和安全问题。内容涵盖TCP、HTTP连接关闭,数据库连接释放,以及内存、文件句柄、线程等资源管理。建议使用异常处理、遵循编程语言最佳实践,并定期审查代码以优化资源管理。
|
存储 JavaScript 前端开发
JS中的数组有哪些常用操作函数和属性
【9月更文挑战第7天】JS中的数组有哪些常用操作函数和属性
125 1
|
存储 编解码 计算机视觉
项目实战:Qt+OpenCV操作摄像头拍照、调节参数和视频录制
项目实战:Qt+OpenCV操作摄像头拍照、调节参数和视频录制
项目实战:Qt+OpenCV操作摄像头拍照、调节参数和视频录制
|
存储 大数据 索引
【Python】NumPy数组和矢量计算
【1月更文挑战第26天】【Python】NumPy数组和矢量计算
|
域名解析 编解码 安全