详解操作符(上)

简介: 详解操作符(上)

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)

复合赋值符:

别的都类似于上图所示

相关文章
|
8月前
|
Java
java使用递归遍历文件目录
java使用递归遍历文件目录
|
9月前
|
SQL Java 数据库
异常处理
异常处理
66 0
C语言第三十二弹---打印整数二进制的奇数位和偶数位
C语言第三十二弹---打印整数二进制的奇数位和偶数位
|
自然语言处理 IDE 开发工具
C++常见英语单词总结(1)
C++常见英语单词总结(1)
|
存储 运维 关系型数据库
Docker(2)
Docker(2)
|
XML Android开发 数据格式
简单的自定义 View,xmlns 作用,属性动画。
简单的自定义 View,xmlns 作用,属性动画。
77 0
TP5.1商城项目开始加载样式
TP5.1商城项目开始加载样式
101 0
TP5.1商城项目开始加载样式
|
关系型数据库 Java MySQL
为什么需要Docker?
估计大家也可能听过Docker这项技术(在论坛上、招聘技能上、交流群上等等),要是不了解Docker,都不好意思在网上冲浪的时候吹牛逼了。 所以这几天学了一下Docker,总结了Docker入门的相关知识,分享给大家(好让我们一起吹牛逼)。
278 0
为什么需要Docker?
|
存储 JSON Shell
CLI使用案例4:灵活配置CLI
配置CLI以满足不同需求: - 配置多个账户,方便测试和多域操作。 - 切换默认账户,不用每个命令都指定。 - 使用HTTPS连接日志服务,更加安全。 - 格式化输出json格式,更方便查阅。
2331 0

热门文章

最新文章