详解操作符(上)

简介: 详解操作符(上)

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)

复合赋值符:

别的都类似于上图所示

相关文章
|
6月前
|
存储 C++
C/C++中位操作符(&,|,^,~)的详解使用
C/C++中位操作符(&,|,^,~)的详解使用
|
1月前
操作符详解
操作符详解
8 0
|
4月前
|
SQL 数据库
IN 操作符
【7月更文挑战第15天】IN 操作符。
40 4
|
4月前
|
SQL 数据库
BETWEEN 操作符
【7月更文挑战第15天】BETWEEN 操作符。
40 3
|
5月前
|
编译器 Linux C语言
操作符详解(2)
操作符详解(2)
45 0
|
5月前
|
索引
操作符,详细讲解
操作符,详细讲解
|
编译器
详解操作符(下)
详解操作符(下)
操作符详解(一)
操作符详解(一)
83 0
|
C语言 索引
【C】操作符详解
今天给大家带来一篇关于C语言操作符的详细介绍,在C语言中操作符主要有以下几种:
|
存储 编译器 C语言
7.27C语言知识点之操作符
7.27C语言知识点之操作符
56 0