位运算

bit (位)

在计算机中,由于只有逻辑0和逻辑1的存在,因此很多东西、动作、数字都要表示为一串二进制的字码例如: 1001 0000 1101等等。其中每一个逻辑0或者1便是一个位。例如这个例子里的1000 1110共有八个位,它的英文名字叫(bit),是计算机中最基本的单位。

Byte (字节)

所谓的字节 Byte,是由八个位组成的一个单元,也就是8个bit组成1个Byte。字节有什么用呢? 在计算机科学中,用于表示ASCII字符,便是运用字节来记录表示字母和一些符号~例如字符A便用 0100 0001 来表示。

Word (字)

而字节以上,便是字:16个位为一个字,它代表计算机处理指令或数据的二进制数位数,是计算机进行数据存储和数据处理的运算的单位。通常称16位是一个字,而32位呢,则是一个双字,64位是两个双字。

高地址和低地址

高字节和低字节

int a = 268543471,化为十六进制是0x1001 A5EFEF属于低字节10属于高字节

大端模式

高位字节排放在内存的低地址端,低位字节排放在内存的高地址

内存地址 0x0001 0x0002 0x0003 0x0004
存放内容 0x10 0x01 0xA5 0xEF

小端模式

低位字节排放在内存的低地址端,高位字节排放在内存的高地址

内存地址 0x0001 0x0002 0x0003 0x0004
存放内容 0xEF 0xA5 0x01 0x10

位运算符

运算符 描述 实例
& 按位与操作,按二进制位进行’与’运算。运算规则:
0 & 0 = 0;
0 & 1 = 0;
1 & 0 = 0;
1 & 1 = 1;
A = 0011 1100
B = 0000 1101
A & B = 0000 1100
即结果为 12
| 按位或运算符,按二进制位进行’或’运算。运算规则:
0 | 0 = 0;
0 | 1 = 1;
1 | 0 = 1;
1 | 1 = 1;
A = 0011 1100
B = 0000 1101
A | B = 0011 1101
即结果为 61
^ 异或运算符,按二进制位进行”异或”运算。运算规则:
0 ^ 0 = 0;
0 ^ 1 = 1;
1 ^ 0 = 1;
1 ^ 1 = 0;
A = 0011 1100
B = 0000 1101
A ^ B = 0011 0001
即结果为 49
~ 取反运算符,按二进制位进行”取反”运算。运算规则:
~1 = 0;
~0 = 1;
A = 0011 1100
~A = 1100 0011
一个有符号二进制数的补码形式
« 二进制左移运算符。
将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。
A = 0011 1100
A « 2 = 1111 0000
即结果为240
» 二进制右移运算符。
将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
A = 0011 1100
A » 2 = 0000 1111
即结果为15

应用

十六进制的颜色值转化为RGB

let hex = 0x2196f3
let r = CGFloat((hex >> 16) & 0xff)
let g = CGFloat((hex >> 8) & 0xff)
let b = CGFloat((hex >> 0) & 0xff)
let color = UIColor(red: r / 255.0, green: g / 255.0, blue: b / 255.0, alpha: 1.0)
view.backgroundColor = color
Loading Disqus comments...
Table of Contents