最近看的东西比较杂,简要的对不太熟悉的东西做个记录,也对计算机基础知识做点回顾。
运算符
- 1.
&*, &+, &-
&+(_:_:)
Returns the sum of the two given values, discarding any overflow.
// 在不出现溢出的情况下,与普通的+运算符无差别,溢出时,不会报错,而是直接转成相应的溢出值
// 例子
let x: Int8 = 10 &+ 21 // x == 31 (未溢出)
/*
0000 1010 // 10的补码
0001 0101 // 21的补码
---------------
0001 1111 // 补码
0001 1111 // 原码(31)
*/
let y: Int8 = 100 &+ 121 // y == -35 (溢出)
/*
0110 0100 // 100的补码
0111 1001 // 121的补码
---------------
1101 1101 // 补码
1101 1100 // 反码
1010 0011 // 原码(-35)
*/
&*,&-
与上述意思相同
- 2.
~=
~=(_:_:)
Returns a Boolean value indicating whether a value is included in a range.
// 判断值是否在指定区间内,返回Bool值
let chosenNumber = 3
if 0..<10 ~= chosenNumber {
print("\(chosenNumber) 在 [0,10)的区间内")
}
// 也可以配合Switch使用
switch chosenNumber {
case 0..<10:
print("\(chosenNumber) 在 [0,10)的区间内")
default:
print("\(chosenNumber) 不在 [0,10)的区间内")
}
基础知识回顾
- 1.原码,反码,补码
总结起来有以下四点
1. 正数的原码,补码,反码都相同
2. 负数的反码是对原码除符号位外均取反
3. 负数的补码是在反码的基础上+1
4. 计算机都是以补码形式进行运算的
- 2.位运算符
& 按位与
1&1==1,1&0==0, 0&0==0
| 按位或
1|0==1, 1|1==1, 0|0==0
^ 按位异或
0^0==0, 1^1==0, 1^0==1
~ 取反
~0==1, ~1==0
<< 左移
a<<4,左移4位,高位丢弃,低位补0
>> 右移(a>>4,右移4位)
例如 a = 15, a>>2
0000 1111 -> 0000 0011
// 正数高位补0,低位丢弃
// 负数高位补0/1由编译系统决定(很多系统规定补1),低位丢弃
- 3.大小端模式
大端小端模式是数据在内存中存储的两种方式
以0x1234为例
大端模式(Big-Endian):数据的低位存储在高内存地址中
----------------
高地址 低地址
----------------
0x34 0x12
----------------
小端模式(Little-Endian):数据的低位存储在低内存地址中
----------------
高地址 低地址
----------------
0x12 0x34
----------------