(二)位运算,计算机不会做加法

原文链接: http://www.cnblogs.com/A-sync/p/6198218.html

 

AND    汇编:and C语言:&

将每一位进行and运算,如果都是1那么结果为1,否则0

 

AND   0100 1101              C语言:  1 = 77&1

           0000 0001

----------------------

          0000 0001   可以判断第几位是0还是1

 

OR  汇编:or  C语言 |

将每一位进行or运算,其中一个是1就是1,都是0则为0

 

XOR  汇编: xor C语言^

将每一位进行xor运算,其中只有一个是1,则为1,都是1或者都是0则为0

 

Not 汇编: not C语言 ~

将每一位取反就是not运算

 

 

计算机是不会做加法的,它是通过位运算做加减乘除

4+5 = ?

0100                                    0100

0101  先做XOR 异或运算       0101   在做and 与运算

----------------------------------------------------

0001                                    0100  如果与运算全部都是0,那么结果就是刚才异或的结果,不是则再次异或和and验证结果,并且左移一位

 

0001   这次是把前面的异或结果和与 运算结果 运算

1000  这里是前面与运算的结果,结果没算完,则要左移一位再次重复前面的步奏,一直到and运算全部为0,那么异或的结果就是最终结果

-------------------

1001

 

0001   再次and运算 验证结果是否运算完毕

1000

------------

0000   全部是0了,运算完毕,那么结果就是1001  ,1001 对应的十进制就是9,这就是计算机算加法

 

乘法

3*8 = ?

我们可以看成8 + 8 +8

那么这样就好办了,利用加法的位运算即可算出乘法,减除同理

 

用异或进行加密与解密

原数据:5AC
  秘钥:45
 
        10101100           00000101
xor  01000101   xor  01000101
---------------- --------------
       11101001             01000000 
加密后数据为  0100000011101001    40E9


解密:
        01000000                 11101001
xor  01000101         xor  01000101
--------------------------------------------
     00000101             10101100


解密后数据为  0000010110101100     05AC

 

加密就是和秘钥 进行异或运算,得到加密到的数据,

然后在用秘钥进行异或一算,就是解密的数据

 

 

 

 

 

转载于:https://www.cnblogs.com/A-sync/p/6198218.html

你可能感兴趣的:((二)位运算,计算机不会做加法)