操作符详解(1)(上)

简介: 操作符详解(1)(上)

1、操作符的分类


算数操作符    +、-、*、/、%
移位操作符 <<、>>
位操作符 &、|、^
赋值操作符 =、+=、 -= 、*=、 /=、 %= 、>>= 、<<= 、&=、 |=、 ^=
单目操作符 ! 、- 、+ 、&、sizeof 、~、-- 、++ 、* 、(类型)
关系操作符 >、 >=、 < 、<=、 != 、==
逻辑操作符 &&、||
条件操作符 exp1 ? exp2 : exp3
逗号表达式

下标引用、函数调用和结构成员

[ ]、( )、.  、->


  1.1操作符的优先级


优先级

运算符

名称或含义

使用形式

结合方向

说明

1

[]

数组下标

数组名[常量表达式]

左到右

--

()

圆括号

(表达式)/函数名(形参表)

--

.

成员选择(对象)

对象.成员名

--

->

成员选择(指针)

对象指针->成员名

--

 

2

-

负号运算符

-表达式

右到左

单目运算符

~

按位取反运算符

~表达式

++

自增运算符

++变量名/变量名++

--

自减运算符

--变量名/变量名--

*

取值运算符

*指针变量

&

取地址运算符

&变量名

!

逻辑非运算符

!表达式

(类型)

强制类型转换

(数据类型)表达式

--

sizeof

长度运算符

sizeof(表达式)

--

 

3

/

表达式/表达式

左到右

双目运算符

*

表达式*表达式

%

余数(取模)

整型表达式%整型表达式

4

+

表达式+表达式

左到右

双目运算符

-

表达式-表达式

5

<< 

左移

变量<<表达式

左到右

双目运算符

>> 

右移

变量>>表达式

 

6

大于

表达式>表达式

左到右

双目运算符

>=

大于等于

表达式>=表达式

小于

表达式<表达式

<=

小于等于

表达式<=表达式

7

==

等于

表达式==表达式

左到右

双目运算符

!=

不等于

表达式!= 表达式

 

8

&

按位与

表达式&表达式

左到右

双目运算符

9

^

按位异或

表达式^表达式

左到右

双目运算符

10

|

按位或

表达式|表达式

左到右

双目运算符

11

&&

逻辑与

表达式&&表达式

左到右

双目运算符

12

||

逻辑或

表达式||表达式

左到右

双目运算符

 

13

?:

条件运算符

表达式1?

表达式2: 表达式3

右到左

三目运算符

 

14

=

赋值运算符

变量=表达式

右到左

--

/=

除后赋值

变量/=表达式

--

*=

乘后赋值

变量*=表达式

--

%=

取模后赋值

变量%=表达式

--

+=

加后赋值

变量+=表达式

--

-=

减后赋值

变量-=表达式

--

<<=

左移后赋值

变量<<=表达式

--

>>=

右移后赋值

变量>>=表达式

--

&=

按位与后赋值

变量&=表达式

--

^=

按位异或后赋值

变量^=表达式

--

|=

按位或后赋值

变量|=表达式

--

 

15

逗号运算符

表达式,表达式,…

左到右

--


2、算数操作符


+、-、*、/、%

+ 操作符将两个数相加

- 操作符将两个数相减

* 操作符将两个数相乘

/ 除法可分为:1、整数除法(除法两端都是整数) 2、浮点数除法(除号两端只要有一个是小数就执行小数除法)

int a = 5/2;

整数除法的结果也为整数,会自动舍弃小数点后的数字,上述代码运行的结果为:a=2;

double a = 5 / 2.0;

浮点数除法的结果可保留小数,上述代码运行结果为:a=2.500000

& 操作符两个操作数必须是整数,当c=a%b时,意思为,c为a除以b的余数

取模操作符的引用:可用除10与模10取出10进制数的每一位


3、移位操作符


这里我们需要明确的是位移操作符移动的是二进制,而我们生活中的一般用的是10进制

我们先来看一下什么是10进制,如下123,1代表的是1*10^2,2代表的是2*10^1;3代表的是3*10^0


二进制同理,比如我们看一下int  a =15的二进制为:1111,分别代表的是:1*2^3+1*2^2+1*2^1+1*2^0

整数的二进制的表示形式有三种:原码;反码;补码

这里值得注意的是:正整数的原码、反码、补码是相同的;负整数的原码、反码、补码是需要计算的

我们这里用的是整型,而一个整形有4个字节=32bit位,所以二进制表示应为32位,第一位为符号位,1表示负数,0表示正数,中间用0补齐就好,正整数的原码、反码、补码表示如下


1. int a = 15;
2. //00000000000000000000000000001111 - 原码
3. //00000000000000000000000000001111 - 反码
4. //00000000000000000000000000001111 - 补码

 

负整数的原码、反码、补码是需要计算的,计算方法和原码、反码、补码表示如下


1. int b = -15;
2. //10000000000000000000000000001111 - 原码
3. //11111111111111111111111111110000 - 反码(原码的符号位不变,其他位按位取反得到的就是反码)
4. //11111111111111111111111111110001 - 补码(反码+1就是补码)

我们还需要明确的是整数在内存中存储的是补码,计算的时候也是使用补码计算的


       3.1、左移操作符


移位移动的二进制序列,左移操作符 - 左边丢弃,右边补0,这里我们以int a =15;为例

       3.2、右移操作符


右移我们这儿分为:

算数右移(右边丢弃,左边补齐原来符号位);逻辑右移(右边丢弃,左边直接补0)

相关文章
|
6天前
|
C语言
条件操作符和逻辑操作符(C语言零基础教程)
条件操作符和逻辑操作符(C语言零基础教程)
|
6天前
|
JavaScript 前端开发 Java
运算符分为哪几类? 哪些运算符常用作判断?简述运算符的优先级?
运算符分为哪几类? 哪些运算符常用作判断?简述运算符的优先级?
|
6天前
|
编译器 C++ 索引
C learning_13 操作符前篇(条件操作符、 逗号表达式、 下标引用、函数调用和结构成员、 表达式求值)
C learning_13 操作符前篇(条件操作符、 逗号表达式、 下标引用、函数调用和结构成员、 表达式求值)
|
6天前
|
存储 C语言
C learning_12 操作符前篇(算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符)
C learning_12 操作符前篇(算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符)
|
10月前
|
C语言 索引
操作符详解(2)(上)
操作符详解(2)(上)
|
10月前
|
存储
操作符详解(1)(下)
操作符详解(1)(下)
|
7月前
|
索引
操作符之关系操作符,逻辑操作符,条件操作符,逗号表达式,下标引用操作符,函数调用操作符,访问结构体成员操作符
操作符之关系操作符,逻辑操作符,条件操作符,逗号表达式,下标引用操作符,函数调用操作符,访问结构体成员操作符
|
7月前
|
编译器 C语言
操作符的属性,C语言中运算符的优先性和结合性,常见的问题表达式
操作符的属性,C语言中运算符的优先性和结合性,常见的问题表达式
|
9月前
|
C语言 索引
【C语言】 操作符(下): -- 条件操作符 --逗号表达式 -- 下标引用操作符 --表达式求值1
【C语言】 操作符(下): -- 条件操作符 --逗号表达式 -- 下标引用操作符 --表达式求值1
|
9月前
|
C语言
【C语言】 操作符(下): -- 条件操作符 --逗号表达式 -- 下标引用操作符 --表达式求值2
【C语言】 操作符(下): -- 条件操作符 --逗号表达式 -- 下标引用操作符 --表达式求值2