// 无进位加法
var a = 5 = 0101
var b = 8 = 1000
var n = a ^ b = 0101 ^ 1000 = 1101 = 13
// 有进位加法
var a = 5 = 0101
var b = 4 = 0100
var a1 = a ^ b = 0101 ^ 0100 = 0001
var b1 = a & b << 1 = 0101 & 0100 << 1 = 0100 << 1 = 1000
// 递归上述过程直到无进位结束
var n = a1 & b1 = 0001 & 1000 = 1001 = 9
计算机数字系统
基本概念
进制表示
0,1
组成数字,如:(00010110)2,转换为十进制值为:n=1*2^4+0*2^3+1*2^2+1*2^1+0*2^0
0-7
组成数字,如:(0564301)8,转换为十进制值为:n=5*85+6*84+4*83+3*82+0*81+1*800-9A-F
组成数字,如:(0x230AE)16,转换为十进制值为:n=2*16^4+3*16^3+0*16^2+10*16^1+14*16^0
进制转换
二进制转换为八进制
00 010 110
高位不足补0得到:(025)8二进制转换为十六进制
0001 0110
高位不足补0得到:(15)16八进制转换为十六进制
数据表示方式
常用的位运算符
位运算一些特性
n & n - 1运算去掉二进制数n的最后一个1
可以使用模板将特定二进制位进行判断
1 ^ n运算
位运算实现整数加减