操作符详解

Posted hanwangyyds

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作符详解相关的知识,希望对你有一定的参考价值。

一、算术操作符

  • /除法的注意事项:若/两端的操作数都是整数,执行整除法;若想得到小数,则要保证除数和被除数至少有一个是浮点数,并且用double/float定义。
  • %取模操作的注数意事项:必须要保证取模两端都是整数

二、移位操作符

1、右移操作符:

分为算术右移(右边丢弃,左边符号位),和逻辑右移(右边丢弃,左边补0),注意我们在使用时,大部分都是算术右移

例:对-1进行右移操作,打印输出结果还是-1.



原理:整数在存储时,用的都是补码,但正数的原码补码反码三码相同。

负数处处时是补码,所以对其进行操作时,都是对补码进行操作,但我们使用、打印的都是原码,因此需要将反码进行转换。

灵魂总结:在对负数进行移位操作时先将负数的原码转换为补码,然后对补码进行操作,最后打印时,再将操作之后的补码转换成原码打印。

 TIP: 按位取反和原码到反码的区别:

按位取反包含符号位,而原码到反码,符号位不变,其余位按位取反!   

右移一位,数字会除2

2、左移操作符

数字会乘2

左边丢弃,右边补0

警告:不能移负数位,这是一种未定义行为。

只适用于整数

操作符详解(1)_操作符

三、按位操作符

看第一次笔记


四、一道恶心的面试题

不创建临时变量,交换两个数的值

1、法一:加减法

操作符详解(1)_操作符_02

缺陷:可能会溢出,因为整型只占4个字节,若数字的值过大,就会溢出

2、法二:异或法(相同为0,相异为1)

操作符详解(1)_补码_03

可以形象地将第一个a^b输出的结果当成密码,然后将这个密码分别与原来的a,b进行异或,可得出结果

缺陷:此代码也有缺陷,其一运行效率不高,其二代码可读性低


五、练习一

求一个整数存储在二进制位中1的个数,即求补码中1的个数

关键:如何求一个数的二进制位的最后一位?进而利用移位操作符求出这个数的每一项是否为1

解:可以将这个数&1,因为1=00000000000000000000000000000000000001,若结果为1,说明最后一位是1,其余位按位取反后因为有0,所以直接变为0

原理:按位与,将两个数进行比较,若有一个数为0,则&按位与的结果就是0

操作符详解(1)_位取反_04

TIP:在求个数时,通常会使用到count++


练习二逐个输出123的数字

有一个通式:先%10,后/10,直到结果为0


六、单目操作符

sizeof 计算变量所占内存空间的大小,单位是字节、

操作符详解(1)_位取反_05

数组一样有类型,去掉数组名,剩下的就是类型

以上是关于操作符详解的主要内容,如果未能解决你的问题,请参考以下文章

C++ STL 双端队列deque详解

jQuery.trim() 函数及trim()用法详解

26 python 中deque模块详解

ArrayDeque详解

计算大数据的相异矩阵

常见的相似或相异程度计算方法