位运算符
2020-09-14 本文已影响0人
黑白森林无间道
位取反运算符
- 位取反运算符(~)是对所有位的数字进行取反操作
位与运算符
- 位与运算符(&)可以对两个数的比特位进行合并,它会返回一个新的数,只有当这两个数都是1的时候才返回1
位或运算符
- 位或运算符(|)可以对两个比特位进行比较,然后返回一个新的数,只要两个操作位任意一个为1时,那么对应的位数就是1
位异或运算符
- 位异或运算符,或者说“互斥或”(^)可以对两个比特位进行比较。返回一个新的数,当两个操作数的对应位不相同时,该数的对应位就是1。
位左移和位右移运算符
- 位左移运算符(<<)和位右移运算符(>>)可以把所有位数的数字向左或向右移动一个确定的位数。
- 位左移和右移具有给整数乘以或除以2的效果。将一个数左移一位相当于把这个数翻倍,将一个数右移一位相当于把这个数减半。
无符号整数的移位操作
- 已经存在的比特位按指定的位数进行左移和右移
- 任何移动超出整型存储边界的位都会被丢弃
- 用 0 来填充向左和向右移动后产生的空白位
有符号整数的移位操作
- 有符号整数使用它的第一位(所谓的符号位)来表示这个整数是正数还是负数。符号为为 0 表示整数, 1 表示负数。
- 其余的位数(所谓的数值位)存储了实际的值,有符号正整数和无符号数的存储方式是一样的,都是从 0 开始算起。
- 但是负数的存储方式略有不同,它存储的是 2 的 n 次方减去它的绝对值,这里的 n 位数值位的位数。
补码表示的优点
- 首先,如果想给 -4 加个 -1,只需要将这两个数的全部八个比特位相加(包括符号位),并且将计算结果中超出的部分丢弃。
- 其次,使用二进制补码可以使负数的位左移和右移操作得到跟整数相同的效果,即每向左移一位就将自身的数值乘以2,每向右移一位就将自身的数值除以2。要达到此目的,对有符号整数的右移有一个额外的规则:当对整数进行右移操作时,遵循与无符号整数相同的规则,但是对于移位产生的空白位使用符号位进行补充,而不是0。