【二进制的一些操作】

<1>二进制与十进制互转

十进制转二进制

例子:13 -> 1101     

13/2=6余1

6/2=3余0

3/2=1余1

1/2=0余1

那么13用二进制表示为 1101 (倒序排列余数 不足的用0补齐 00001101) 

二进制转十进制   

例子:1101 -> 13  可以在C#里面声明为 int num = 0b1101 或者 string num = "00001101"

补齐00001101

13 = 0*2^7 + 0*2^6 + 0*2^5 + 0*2^4 + 1*2^3 + 1*2^2 + 0*2^1 + 1*2^0 = 0+0+0+0  +8+4+0+1

 

<2>位运算

~ 逻辑非运算 00001101 -> 11110010  即 1取0   0取1

& 逻辑与运算 00001101&00000011 -> 00000001 即1&1取1   1&0取0  0&0取0

| 逻辑或运算  00001101&00000011 -> 00001111 即1&1取1   1&0取1  0&0取0 

^ 逻辑异或运算 00001101&00000011 -> 00001110 即1&1取0   1&0取1  0&0取0   相同取0 不同取1

<< 左移运算 00001101 -> 01101000 即 把每一位向左移3位 等于把原始数字*2^3 = 13 * 2^3

>> 右移运算 00001101 -> 00000001即 把每一位向右移3位 等于把原始数字/2^3 = 13 / 2^3

 

<3>一个在游戏中的应用:使用0-7的二进制表示8个方向

 

//0 0/2 = 00        0000  
//1 1/2 = 01        0001  //可以表示为Z轴
//2 10 01            0010  //可以表示为Y轴
//3 11 0              0011
//4 20 10 01       0100  //可以表示为X轴
//5 21 10 01       0101
//6 30 11 01       0110
//7 31 11 01       0111
//8 40 20 10 01 1000 与0-7做 | 运算  可以取交集

在八叉树中,可以用0-7与1,2,4做&运算 取到父节点分割8个子节点的位置关系

 

posted on 2019-05-07 11:16  tianjiuwan  阅读(459)  评论(0编辑  收藏  举报