小知识点总结

2017-11-05  本文已影响0人  aksskas

最近看的东西比较杂,简要的对不太熟悉的东西做个记录,也对计算机基础知识做点回顾。

运算符

&+(_:_:)
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)
 */

&*,&-与上述意思相同

~=(_:_:)
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. 正数的原码,补码,反码都相同
2. 负数的反码是对原码除符号位外均取反
3. 负数的补码是在反码的基础上+1
4. 计算机都是以补码形式进行运算的
& 按位与   
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),低位丢弃
以0x1234为例
大端模式(Big-Endian):数据的低位存储在高内存地址中
----------------
高地址    低地址
----------------
0x34      0x12    
----------------
小端模式(Little-Endian):数据的低位存储在低内存地址中
----------------
高地址    低地址
----------------
0x12      0x34   
----------------
上一篇下一篇

猜你喜欢

热点阅读