位运算符
<
先说左移运算符,它的符号表示是<<
举个例子,先定义一个int类型的数,十进制的value = 733183670,转换成二进制在计算机中的表示如下(int类型占4个字节):
![95f9596b3080471da09038c7b2094783.png](https://i-blog.csdnimg.cn/blog_migrate/503724f6c4cb51c3953dd78de3c92c38.jpeg)
value << 1,代表左移1位,运算过程如下:
![c49c26db845e0ecbc0426d731a2a4e1e.png](https://i-blog.csdnimg.cn/blog_migrate/e81ef3ca2a58263c8d5aaade6f32e387.jpeg)
那么如果往左移8位呢,value << 8
![01057f91a81a2e25c911eb8c78c0fa62.png](https://i-blog.csdnimg.cn/blog_migrate/86c655cef071273c5fae922abf2713c1.jpeg)
左移8位后变成了十进制的值为:-1283541504,移动8位后,由于首位变成了1,也就变成了负数,在使用左移运算符时要考虑变成负数的情况。
>>右移
再来说说右移运算符,它的符号是>>
依旧设定value = 733183670,向右移8位,运算过程如下:
![230f3e424b2f3ce0c575d8be4ee4730d.png](https://i-blog.csdnimg.cn/blog_migrate/2476e1433fee2ba2c256d3686a6a8be8.jpeg)
和左移一样,缺失位补0,但是需要注意负数的右移
设定value = -733183670,需要注意负数在计算机中的存储形式是其同值正数的补码
先说个分支:原码、反码、补码
int类型的+1的原码是:
![b24301b4cb9f9ee94dd67539eefef977.png](https://i-blog.csdnimg.cn/blog_migrate/656caa732a7b1093fc809b012cf8114b.jpeg)
int类型的+1的反码是(原码各位取反)
![aafcfaeccc3672671f4d31aa263ed787.png](https://i-blog.csdnimg.cn/blog_migrate/17ad8bb9996820188e7645adb4ab3228.jpeg)
int类型的+1的补码是(反码末位加1)
![e323ee456ae4cdb9fba694daedf958d2.png](https://i-blog.csdnimg.cn/blog_migrate/254aa61435608e02db8ed274b5af4d93.jpeg)
普及了补码的知识,那么接着说value = -733183670,如果它往右移8位呢?
![8752a42829da9f1d8b8a4964973501e3.png](https://i-blog.csdnimg.cn/blog_migrate/4ca60cfa0dac65c0eb6d8759b294e806.jpeg)
>>>无符号右移
还有一个无符号右移运算符>>>
无符号右移运算符>>>和右移运算符>>是一样的,只不过右移时左边是补上符号位,而无符号右移运算符是补上0
![6e2d58e85031695172a2adee866dfcbc.png](https://i-blog.csdnimg.cn/blog_migrate/a97c724b05809c84edf9c5a44609f350.jpeg)
&与运算
&它既是一个逻辑运算符,也是一个位运算符,那么它在位运算中如何表示呢?
以3&5运算为例,先将3和5转化为二进制数,具体计算如下:
![95633037271df795b96c27b5fb48d2c4.png](https://i-blog.csdnimg.cn/blog_migrate/fe3275b704fdf37f70e364f7d5078203.jpeg)
结论:
对应位同为1时,才为1,否则全为0(对应位只要有0,全为0,否则为1)。
另外:也可以把1理解为true,把0理解为false, true和false进行与&运算时,必须同为true时结果才为true。
|或运算
和与运算逻辑相似,不同的是对应为数字的判断:
![e6c8a4ba676f2d43b77ce49826d89243.png](https://i-blog.csdnimg.cn/blog_migrate/d9e99c1779d4162f59895751ad9f99c6.jpeg)
总结:
对应位只要有1时,即为1,否则全为0(对应位只有全是0时,结果才是0,否则为1)。
另外:也可以把1理解为true,把0理解为false, true和false进行或|运算时,只要有true,结果即为true。
~非运算
以~3为例:
![0d74acaee0f36bf8bf47c82b29df2646.png](https://i-blog.csdnimg.cn/blog_migrate/44a0892b24f45fe3512b0edea7d67e86.jpeg)
总结:
对每位进行取反。
^异或运算
以3^5为例:
![d6796508b47c908bec5abe985511b098.png](https://i-blog.csdnimg.cn/blog_migrate/9bf8ab36cad8c449c3f40db95ed65974.jpeg)
总结:
只要对应为不同即为1。
三元运算符
三元运算符有一个标准语法a?b:c
用文字解释就是a为布尔表达式,b和c为同一类型的表达式或值,当a=true时,整个表达式的值为b的值,否则为c的值。
注意事项:
- 必须同时保证表达式b和表达式c都符合被赋值变量数据类型的要求。
- 三元运算符的结果必须被使用。
![f57187d4932aac27cb842a7c7ea69cc8.png](https://i-blog.csdnimg.cn/blog_migrate/32cc2fd1e6dca252eaa5f644c8162cfe.jpeg)