操作符详解
Posted hanwangyyds
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作符详解相关的知识,希望对你有一定的参考价值。
一、算术操作符
- /除法的注意事项:若/两端的操作数都是整数,执行整除法;若想得到小数,则要保证除数和被除数至少有一个是浮点数,并且用double/float定义。
- %取模操作的注数意事项:必须要保证取模两端都是整数。
二、移位操作符
1、右移操作符:
分为算术右移(右边丢弃,左边补原符号位),和逻辑右移(右边丢弃,左边补0),注意我们在使用时,大部分都是算术右移
例:对-1进行右移操作,打印输出结果还是-1.
原理:整数在存储时,用的都是补码,但正数的原码补码反码三码相同。
负数处处时是补码,所以对其进行操作时,都是对补码进行操作,但我们使用、打印的都是原码,因此需要将反码进行转换。
灵魂总结:在对负数进行移位操作时先将负数的原码转换为补码,然后对补码进行操作,最后打印时,再将操作之后的补码转换成原码打印。
TIP: 按位取反和原码到反码的区别:
按位取反包含符号位,而原码到反码,符号位不变,其余位按位取反!
右移一位,数字会除2
2、左移操作符
数字会乘2
左边丢弃,右边补0
警告:不能移负数位,这是一种未定义行为。
只适用于整数
三、按位操作符
看第一次笔记
四、一道恶心的面试题
不创建临时变量,交换两个数的值
1、法一:加减法
缺陷:可能会溢出,因为整型只占4个字节,若数字的值过大,就会溢出
2、法二:异或法(相同为0,相异为1)
可以形象地将第一个a^b输出的结果当成密码,然后将这个密码分别与原来的a,b进行异或,可得出结果
缺陷:此代码也有缺陷,其一运行效率不高,其二代码可读性低
五、练习一
求一个整数存储在二进制位中1的个数,即求补码中1的个数
关键:如何求一个数的二进制位的最后一位?进而利用移位操作符求出这个数的每一项是否为1
解:可以将这个数&1,因为1=00000000000000000000000000000000000001,若结果为1,说明最后一位是1,其余位按位取反后因为有0,所以直接变为0
原理:按位与,将两个数进行比较,若有一个数为0,则&按位与的结果就是0
TIP:在求个数时,通常会使用到count++
练习二逐个输出123的数字
有一个通式:先%10,后/10,直到结果为0
六、单目操作符
sizeof 计算变量所占内存空间的大小,单位是字节、
数组一样有类型,去掉数组名,剩下的就是类型
以上是关于操作符详解的主要内容,如果未能解决你的问题,请参考以下文章