1.高级运算符
- 位运算符,移位运算符 ,溢出加法运算符,
2.位运算法
-
按位
取反
运算符~
-
按位
与
运算符&
-
按位
或
运算符|
-
按位
异或
运算符^
-
按位
左移
,右移
运算符<<
和>>
-
取反 ~0b00001111 = 0b11110000
-
与 0b11111100 & 0b00111111 = 00111100
-
或 0b10110010 | 0b01011110 = 11111110
-
异或 0b00010100 ^ 0b00000101 = 00010001
-
无符号左移右移 逻辑移位
-
无符号整数的移位运算 对无符号整数进行移位的规则如下:
-
已经存在的位按指定的位数进行左移和右移
-
任何因移动而超出整型存储范围的位都会被丢弃
-
用 0 来填充移位后产生的空白位
-
颜色值16进制CC6699 转为10进制RGB(204,102,153)
-
有符号的按位左移右移运算 算术移位
-
符号为0为正,1为负
-
它存储的值的绝对值等于 2 的 n 次方减去它的实际值(也就是数值位表示的值),这里的 n 为数值位的比特位数。一个 8 比特位的数有 7 个比特位是数值位,所以是 2 的 7 次方,即 128
-
对有符号整数的右移有一个额外的规则
-
当对整数进行按位右移运算时,遵循与无符号整数相同的规则,但是对于移位产生的空白位使用符号位进行填充,而不是用 0
3.溢出运算符
-
溢出加法(
&+
)溢出减法(&-
),溢出乘法(&*
) -
UInt8.max &+ 1 = 0
-
UInt8.min &- 1 = 255
-
在对有符号整型数值进行溢出加法或溢出减法运算时,符号位也需要参与计算
-
Int8.min &- 1 = 127(-128 - 1 = 127)
-
对于无符号与有符号整型数值来说,当出现上溢时,它们会从数值所能容纳的最大数变成最小的数。同样地,当发生下溢时,它们会从所能容纳的最小数变成最大的数。
4.运算符函数
-
类和结构体可以为现有的运算符实现自定义的实现,成为运算符重载
-
双目中缀运算符的自定义实现 对加号的重载
-
前缀和后缀运算符(-A)取反
-
复合运算符 (+= )
-
等价运算符 (== ,!=)
5.自定义运算符,自定义优先级
-
“新的运算符要使用
operator
关键字在全局作用域内进行定义,同时还要指定prefix
、infix
或者postfix
修饰符: -
+++ 实现,自增的正值
-
优先级