操作符详解(1)
本文将介绍各类操作符以及使用,通过多篇文章来详解各类操作符
1.操作符的分类
(1)算术操作符
(2)移位操作符
(3)位操作符
(4)赋值操作符
(5)单目操作符
(6)关系操作符
(7)逻辑操作符
(8)条件操作符
(9)逗号表达式
(10)下标引用、函数调用和结构成员
2.算数操作符
+ - * / %
如上面所示,加减乘除模运算是常见的算数操作符,其中也需要注意几点
1.除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。
2.对于 / 操作符如果两个操作数都为整数,执行整数除法。 而只要有浮点数执行的就是浮点数除法。如图1所示
3.% 操作符的两个操作数必须为整数。返回的是整除之后的余数。
3.移位操作符
3.1 左移操作符
左移操作符:左边溢出的数字被抛弃,右边末尾补0
3.2右移操作符
右移分为两种:分别是逻辑右移和算数右移
1.逻辑移位左边用0补充,右边溢出的数字丢弃
2. 算术移位左边用原来值的符号位填充,右边溢出数字丢弃
注意:对于移位运算符,不要移动负数位,这个是标准未定义的。
在VS2019中,右移使用算术右移
整数在内存中是以二进制补码的形式存储的
a = -1 ,
-1的原码是:10000000000000000000000000000001
-1的补码是:11111111111111111111111111111111
算数右移(左边用原来值的符号位填充,右边溢出数字丢弃): 11111111111111111111111111111111
右移后看符号位为1,是负数,补码取反+1是原码,所以是:10000000000000000000000000000001
等于 -1
4.位操作符
一道面试题:不能创建临时变量(第三个变量),实现两个数的交换。
编写代码实现:求一个整数存储在内存中的二进制中1的个数。
1<<i是把1左移i位,每次左移以为就是乘以2,所以1<<i的结果是1乘以2的i次方
i<<1就是把i左移一位,即i乘以2,假如i=5,最后结果就是5*2=10