本帖最后由 xiniuniu 于 2015-4-10 15:37 编辑
假设x = 2, y = 3; x + y = ?; 从CPU的角度,他是怎样计算的呢 第1步:把2和3进行异或操作 得到结果 0001存放到某处
| 0010 | ^ | 0011 |
| ---------- |
| 0001 |
第2步:再把2和3进行与操作 得到结果 0010
再把0010左移1位得到0100, 判断移位后的结果是否为0, 如果为为,则前边异或所得的结果就是最终结果,如果不为0 则把前边异或得得结果,和后边与运算并左移一位的结果 再次执行异或操作
第3步:把0001和0100进行异或 得到结果0101
第4步 再把0001和0100进行一次与运算
得到结果为0000, 0000 << 1 结果仍为0, 所以2+3所得最终结果为0101 转成10进制为5
那么2 - 3呢? 2转换成2进制为 0010 -3转换成2进制为1101 1
2
0000 << 1 结果还为0, 所以最终结果为1111作为有符号数,1111转换成10进制就是-1 结果正确
结论:说明计算机会把我们人类所熟知的各种运算,转换成不同的位运算, 我们所会的加减乘除他都是不会的。但都通过位运算的变形来实现 感谢计算机科学家和数学家们所做出的努力。让我们得以享用当今信息技术的果实。既然成为不了计算机科学家,那就让我们站在他们的肩膀 上吧! |