Swift学习17:位运算符
位取反运算符
- 位取反运算符
~
是对所有位的数字进行取反操作
1 | let n1:UInt8 = 255 |
位与运算符
- 位与运算符
&
可以对两个数的比特位进行合并,它会返回一个新的数,只有当这两个数都是1
时才能返回1
1 | let n1:UInt8 = 255 |
位或运算符
- 位或运算符
|
可以对两个比特位进行比较,然后返回一个新的数,只要两个操作位任意一个为1
时,那么对应的位数就为1
位异或运算符
- 位异或运算符,或者说 互斥或
^
可以对两个数的比特位进行比较,它返回一个新的数,当两个操作数的对应位不同时,该数的对应位就为1
1 | let n1:UInt8 = 255 |
位左移和右移运算符
位左移运算符
<<
和位右移运算符>>
可以把所有位数的数字向左或向右移动一个确定的位数位
左移和右移
具有给整数乘以或除以二
的效果,将一个数左移
一位相当于把这个数翻
倍,将一个数右移
相当于把这个数减半
无符号整数的位移操作
已经存在的比特位按指定的位数进行左移和右移
任何移动超出整型存储边界的位都会被丢弃
用
0
来填充向左或向右移动后产生的空白位
有符号整数的位移操作
- 有符号整数使用它的第一位(所谓的符号位)来表示这个整数是正数还是负数,符号位
0
表示正数
,1
表示负数
其余的位数(所谓的数值位)存储了实际的值,有符号正整数和无符号数的存储方式是一样的,都是从
0
开始算起但是负数的存储方式略有不同,它存储的是
2
的n
次方减去它的绝对值,这里的n
为数值位的位数
示例:
1 | let n6: Int = 8 |
补码表示的优点
- 首先,如果想给
-4
加个-1
,只需要将这两个数的全部8
个比特位相加(包括符号位),并且将计算结果中超出的部分丢掉
- 其次,使用二进制补码可以使负数位的位左移和右移操作得到根正数同样的效果,即每向左移一位就将自身的数值
乘以2
,每向右移一位就将自身的数值除以2
,要达到此目的,对有符号的整数
的右移有一个额外的规则:当对整数进行位右移操作时,遵循与无符号整数相同的规则,但是对于位移产生的空白位使用符号进行填充,而不是0
- Post title:Swift学习17:位运算符
- Post author:张建
- Create time:2023-02-23 01:32:26
- Post link:https://redefine.ohevan.com/2023/02/23/Swift课程/Swift学习17:位运算符/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.